| 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;
|
|
|