Index: src/objects.cc |
diff --git a/src/objects.cc b/src/objects.cc |
index 87853f3805a9f3a8fc2463f35ce8b2effa9fc16e..68d0326374820ed7d1eb56d65f5fab19845bbd3c 100644 |
--- a/src/objects.cc |
+++ b/src/objects.cc |
@@ -945,11 +945,9 @@ Object* Object::GetHash() { |
} |
-Handle<Object> Object::GetOrCreateHash(Handle<Object> object, |
- Isolate* isolate) { |
+Handle<Smi> Object::GetOrCreateHash(Isolate* isolate, Handle<Object> object) { |
Handle<Object> hash(object->GetHash(), isolate); |
- if (hash->IsSmi()) |
- return hash; |
+ if (hash->IsSmi()) return Handle<Smi>::cast(hash); |
ASSERT(object->IsJSReceiver()); |
return JSReceiver::GetOrCreateIdentityHash(Handle<JSReceiver>::cast(object)); |
@@ -5096,13 +5094,13 @@ void JSObject::SetIdentityHash(Handle<JSObject> object, Handle<Smi> hash) { |
template<typename ProxyType> |
-static Handle<Object> GetOrCreateIdentityHashHelper(Handle<ProxyType> proxy) { |
+static Handle<Smi> GetOrCreateIdentityHashHelper(Handle<ProxyType> proxy) { |
Isolate* isolate = proxy->GetIsolate(); |
- Handle<Object> hash(proxy->hash(), isolate); |
- if (hash->IsSmi()) return hash; |
+ Handle<Object> maybe_hash(proxy->hash(), isolate); |
+ if (maybe_hash->IsSmi()) return Handle<Smi>::cast(maybe_hash); |
- hash = handle(GenerateIdentityHash(isolate), isolate); |
+ Handle<Smi> hash(GenerateIdentityHash(isolate), isolate); |
proxy->set_hash(*hash); |
return hash; |
} |
@@ -5122,17 +5120,17 @@ Object* JSObject::GetIdentityHash() { |
} |
-Handle<Object> JSObject::GetOrCreateIdentityHash(Handle<JSObject> object) { |
+Handle<Smi> JSObject::GetOrCreateIdentityHash(Handle<JSObject> object) { |
if (object->IsJSGlobalProxy()) { |
return GetOrCreateIdentityHashHelper(Handle<JSGlobalProxy>::cast(object)); |
} |
Isolate* isolate = object->GetIsolate(); |
- Handle<Object> hash(object->GetIdentityHash(), isolate); |
- if (hash->IsSmi()) return hash; |
+ Handle<Object> maybe_hash(object->GetIdentityHash(), isolate); |
+ if (maybe_hash->IsSmi()) return Handle<Smi>::cast(maybe_hash); |
- hash = handle(GenerateIdentityHash(isolate), isolate); |
+ Handle<Smi> hash(GenerateIdentityHash(isolate), isolate); |
SetHiddenProperty(object, isolate->factory()->identity_hash_string(), hash); |
return hash; |
} |
@@ -5143,7 +5141,7 @@ Object* JSProxy::GetIdentityHash() { |
} |
-Handle<Object> JSProxy::GetOrCreateIdentityHash(Handle<JSProxy> proxy) { |
+Handle<Smi> JSProxy::GetOrCreateIdentityHash(Handle<JSProxy> proxy) { |
return GetOrCreateIdentityHashHelper(proxy); |
} |
@@ -16109,7 +16107,7 @@ Handle<ObjectHashTable> ObjectHashTable::Put(Handle<ObjectHashTable> table, |
Isolate* isolate = table->GetIsolate(); |
// Make sure the key object has an identity hash code. |
- Handle<Object> hash = Object::GetOrCreateHash(key, isolate); |
+ Handle<Smi> hash = Object::GetOrCreateHash(isolate, key); |
int entry = table->FindEntry(key); |
@@ -16128,7 +16126,7 @@ Handle<ObjectHashTable> ObjectHashTable::Put(Handle<ObjectHashTable> table, |
// Check whether the hash table should be extended. |
table = EnsureCapacity(table, 1, key); |
- table->AddEntry(table->FindInsertionEntry(Handle<Smi>::cast(hash)->value()), |
+ table->AddEntry(table->FindInsertionEntry(hash->value()), |
*key, |
*value); |
return table; |
@@ -16421,8 +16419,8 @@ Handle<OrderedHashSet> OrderedHashSet::Add(Handle<OrderedHashSet> table, |
table = EnsureGrowable(table); |
- Handle<Object> hash = GetOrCreateHash(key, table->GetIsolate()); |
- int index = table->AddEntry(Smi::cast(*hash)->value()); |
+ Handle<Smi> hash = GetOrCreateHash(table->GetIsolate(), key); |
+ int index = table->AddEntry(hash->value()); |
table->set(index, *key); |
return table; |
} |
@@ -16463,8 +16461,8 @@ Handle<OrderedHashMap> OrderedHashMap::Put(Handle<OrderedHashMap> table, |
table = EnsureGrowable(table); |
- Handle<Object> hash = GetOrCreateHash(key, table->GetIsolate()); |
- int index = table->AddEntry(Smi::cast(*hash)->value()); |
+ Handle<Smi> hash = GetOrCreateHash(table->GetIsolate(), key); |
+ int index = table->AddEntry(hash->value()); |
table->set(index, *key); |
table->set(index + kValueOffset, *value); |
return table; |