Index: src/hydrogen-instructions.h |
diff --git a/src/hydrogen-instructions.h b/src/hydrogen-instructions.h |
index aa2cdae0a83190b00c7dbdd132f9066e518f49ae..3c2811931db872ec8625d240bb4a8a8029a039d5 100644 |
--- a/src/hydrogen-instructions.h |
+++ b/src/hydrogen-instructions.h |
@@ -309,12 +309,8 @@ class UniqueValueId V8_FINAL { |
public: |
UniqueValueId() : raw_address_(NULL) { } |
- explicit UniqueValueId(Object* object) { |
- raw_address_ = reinterpret_cast<Address>(object); |
- ASSERT(IsInitialized()); |
- } |
- |
explicit UniqueValueId(Handle<Object> handle) { |
+ ASSERT(!AllowHeapAllocation::IsAllowed()); |
static const Address kEmptyHandleSentinel = reinterpret_cast<Address>(1); |
if (handle.is_null()) { |
raw_address_ = kEmptyHandleSentinel; |
@@ -342,8 +338,30 @@ class UniqueValueId V8_FINAL { |
return reinterpret_cast<intptr_t>(raw_address_); |
} |
+#define IMMOVABLE_UNIQUE_VALUE_ID(name) \ |
+ static UniqueValueId name(Heap* heap) { \ |
+ return UniqueValueId(heap->name()); \ |
+ } |
+ |
+ IMMOVABLE_UNIQUE_VALUE_ID(free_space_map) |
+ IMMOVABLE_UNIQUE_VALUE_ID(minus_zero_value) |
+ IMMOVABLE_UNIQUE_VALUE_ID(nan_value) |
+ IMMOVABLE_UNIQUE_VALUE_ID(undefined_value) |
+ IMMOVABLE_UNIQUE_VALUE_ID(null_value) |
+ IMMOVABLE_UNIQUE_VALUE_ID(true_value) |
+ IMMOVABLE_UNIQUE_VALUE_ID(false_value) |
+ IMMOVABLE_UNIQUE_VALUE_ID(the_hole_value) |
+ IMMOVABLE_UNIQUE_VALUE_ID(empty_string) |
+ |
+#undef IMMOVABLE_UNIQUE_VALUE_ID |
+ |
private: |
Address raw_address_; |
+ |
+ explicit UniqueValueId(Object* object) { |
+ raw_address_ = reinterpret_cast<Address>(object); |
+ ASSERT(IsInitialized()); |
+ } |
}; |
@@ -3327,14 +3345,14 @@ class HConstant V8_FINAL : public HTemplateInstruction<0> { |
ASSERT(!handle_.is_null()); |
Heap* heap = isolate()->heap(); |
- ASSERT(unique_id_ != UniqueValueId(heap->minus_zero_value())); |
- ASSERT(unique_id_ != UniqueValueId(heap->nan_value())); |
- return unique_id_ == UniqueValueId(heap->undefined_value()) || |
- unique_id_ == UniqueValueId(heap->null_value()) || |
- unique_id_ == UniqueValueId(heap->true_value()) || |
- unique_id_ == UniqueValueId(heap->false_value()) || |
- unique_id_ == UniqueValueId(heap->the_hole_value()) || |
- unique_id_ == UniqueValueId(heap->empty_string()); |
+ ASSERT(unique_id_ != UniqueValueId::minus_zero_value(heap)); |
+ ASSERT(unique_id_ != UniqueValueId::nan_value(heap)); |
+ return unique_id_ == UniqueValueId::undefined_value(heap) || |
+ unique_id_ == UniqueValueId::null_value(heap) || |
+ unique_id_ == UniqueValueId::true_value(heap) || |
+ unique_id_ == UniqueValueId::false_value(heap) || |
+ unique_id_ == UniqueValueId::the_hole_value(heap) || |
+ unique_id_ == UniqueValueId::empty_string(heap); |
} |
bool IsCell() const { |