Index: src/hydrogen-instructions.h |
diff --git a/src/hydrogen-instructions.h b/src/hydrogen-instructions.h |
index 65a9c959887a2eb926c918a95cc2fcd805047359..d800e3094f919191bdbde3c52bfc3a1dad88424e 100644 |
--- a/src/hydrogen-instructions.h |
+++ b/src/hydrogen-instructions.h |
@@ -3251,7 +3251,7 @@ class HConstant: public HTemplateInstruction<0> { |
Handle<Object> handle() { |
if (handle_.is_null()) { |
- handle_ = FACTORY->NewNumber(double_value_, TENURED); |
+ handle_ = FACTORY->NewNumber(double_value_, pretenure()); |
} |
ALLOW_HANDLE_DEREF(Isolate::Current(), "smi check"); |
ASSERT(has_int32_value_ || !handle_->IsSmi()); |
@@ -3265,10 +3265,15 @@ class HConstant: public HTemplateInstruction<0> { |
std::isnan(double_value_)); |
} |
- bool InNewSpace() { |
- if (handle().is_null()) return false; |
- ALLOW_HANDLE_DEREF(isolate(), "using raw address"); |
- return isolate()->heap()->InNewSpace(*handle()); |
+ bool InNewSpace() const { |
+ if (!handle_.is_null()) { |
+ ALLOW_HANDLE_DEREF(isolate(), "using raw address"); |
+ return isolate()->heap()->InNewSpace(*handle_); |
+ } |
+ // If the handle wasn't created yet, then we have a number. |
+ // If the handle is created it'll be tenured in old space. |
+ ASSERT(pretenure() == TENURED); |
+ return false; |
} |
bool ImmortalImmovable() const { |
@@ -3406,6 +3411,8 @@ class HConstant: public HTemplateInstruction<0> { |
// HeapObject the constant originated from or is null. If the |
// constant is non-numeric, handle_ always points to a valid |
// constant HeapObject. |
+ static PretenureFlag pretenure() { return TENURED; } |
Michael Starzinger
2013/04/29 11:16:44
I don't understand this function, wouldn't a comme
|
+ |
Handle<Object> handle_; |
UniqueValueId unique_id_; |