Index: src/api.cc |
diff --git a/src/api.cc b/src/api.cc |
index 71a715c1bb28b20189b91421f7605518f9174f98..a59b934d3456e5bb36882b2d108ae4a86737966f 100644 |
--- a/src/api.cc |
+++ b/src/api.cc |
@@ -3092,39 +3092,7 @@ int v8::Object::GetIdentityHash() { |
ENTER_V8(isolate); |
i::HandleScope scope(isolate); |
i::Handle<i::JSObject> self = Utils::OpenHandle(this); |
- i::Handle<i::Object> hidden_props_obj(i::GetHiddenProperties(self, true)); |
- if (!hidden_props_obj->IsJSObject()) { |
- // We failed to create hidden properties. That's a detached |
- // global proxy. |
- ASSERT(hidden_props_obj->IsUndefined()); |
- return 0; |
- } |
- i::Handle<i::JSObject> hidden_props = |
- i::Handle<i::JSObject>::cast(hidden_props_obj); |
- i::Handle<i::String> hash_symbol = isolate->factory()->identity_hash_symbol(); |
- if (hidden_props->HasLocalProperty(*hash_symbol)) { |
- i::Handle<i::Object> hash = i::GetProperty(hidden_props, hash_symbol); |
- CHECK(!hash.is_null()); |
- CHECK(hash->IsSmi()); |
- return i::Smi::cast(*hash)->value(); |
- } |
- |
- int hash_value; |
- int attempts = 0; |
- do { |
- // Generate a random 32-bit hash value but limit range to fit |
- // within a smi. |
- hash_value = i::V8::Random(self->GetIsolate()) & i::Smi::kMaxValue; |
- attempts++; |
- } while (hash_value == 0 && attempts < 30); |
- hash_value = hash_value != 0 ? hash_value : 1; // never return 0 |
- CHECK(!i::SetLocalPropertyIgnoreAttributes( |
- hidden_props, |
- hash_symbol, |
- i::Handle<i::Object>(i::Smi::FromInt(hash_value)), |
- static_cast<PropertyAttributes>(None)).is_null()); |
- |
- return hash_value; |
+ return i::GetIdentityHash(self)->value(); |
} |