Commit 64bb1800 authored by yangguo@chromium.org's avatar yangguo@chromium.org

Add assertion to UniqueValueId constructor.

R=verwaest@chromium.org
BUG=

Review URL: https://codereview.chromium.org/23781006

git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@16652 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
parent 1610803b
......@@ -3455,7 +3455,7 @@ void HAllocate::CreateFreeSpaceFiller(int32_t free_space_size) {
zone,
context(),
isolate()->factory()->free_space_map(),
UniqueValueId(isolate()->heap()->free_space_map()));
UniqueValueId::free_space_map(isolate()->heap()));
filler_map->InsertAfter(free_space_instr);
HInstruction* store_map = HStoreNamedField::New(zone, context(),
free_space_instr, HObjectAccess::ForMap(), filler_map);
......
......@@ -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,28 @@ 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 +3343,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 {
......
......@@ -649,7 +649,7 @@ HConstant* HGraph::GetConstant##Name() { \
if (!constant_##name##_.is_set()) { \
HConstant* constant = new(zone()) HConstant( \
isolate()->factory()->name##_value(), \
UniqueValueId(isolate()->heap()->name##_value()), \
UniqueValueId::name##_value(isolate()->heap()), \
Representation::Tagged(), \
htype, \
false, \
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment