OLD | NEW |
1 // Copyright 2013 the V8 project authors. All rights reserved. | 1 // Copyright 2013 the V8 project authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "v8.h" | 5 #include "v8.h" |
6 | 6 |
7 #include "accessors.h" | 7 #include "accessors.h" |
8 #include "allocation-site-scopes.h" | 8 #include "allocation-site-scopes.h" |
9 #include "api.h" | 9 #include "api.h" |
10 #include "arguments.h" | 10 #include "arguments.h" |
(...skipping 5094 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
5105 } | 5105 } |
5106 | 5106 |
5107 | 5107 |
5108 void JSObject::SetIdentityHash(Handle<JSObject> object, Handle<Smi> hash) { | 5108 void JSObject::SetIdentityHash(Handle<JSObject> object, Handle<Smi> hash) { |
5109 Isolate* isolate = object->GetIsolate(); | 5109 Isolate* isolate = object->GetIsolate(); |
5110 SetHiddenProperty(object, isolate->factory()->identity_hash_string(), hash); | 5110 SetHiddenProperty(object, isolate->factory()->identity_hash_string(), hash); |
5111 } | 5111 } |
5112 | 5112 |
5113 | 5113 |
5114 Object* JSObject::GetIdentityHash() { | 5114 Object* JSObject::GetIdentityHash() { |
5115 Object* stored_value = GetHiddenProperty(GetHeap()->identity_hash_string()); | 5115 DisallowHeapAllocation no_gc; |
5116 return stored_value->IsSmi() ? stored_value : GetHeap()->undefined_value(); | 5116 Isolate* isolate = GetIsolate(); |
| 5117 Object* stored_value = |
| 5118 GetHiddenProperty(isolate->factory()->identity_hash_string()); |
| 5119 return stored_value->IsSmi() |
| 5120 ? stored_value |
| 5121 : isolate->heap()->undefined_value(); |
5117 } | 5122 } |
5118 | 5123 |
5119 | 5124 |
5120 Handle<Object> JSObject::GetOrCreateIdentityHash(Handle<JSObject> object) { | 5125 Handle<Object> JSObject::GetOrCreateIdentityHash(Handle<JSObject> object) { |
5121 Handle<Object> hash(object->GetIdentityHash(), object->GetIsolate()); | 5126 Handle<Object> hash(object->GetIdentityHash(), object->GetIsolate()); |
5122 if (hash->IsSmi()) | 5127 if (hash->IsSmi()) |
5123 return hash; | 5128 return hash; |
5124 | 5129 |
5125 Isolate* isolate = object->GetIsolate(); | 5130 Isolate* isolate = object->GetIsolate(); |
5126 | 5131 |
(...skipping 21 matching lines...) Expand all Loading... |
5148 Handle<Object> hash(proxy->GetIdentityHash(), isolate); | 5153 Handle<Object> hash(proxy->GetIdentityHash(), isolate); |
5149 if (hash->IsSmi()) | 5154 if (hash->IsSmi()) |
5150 return hash; | 5155 return hash; |
5151 | 5156 |
5152 hash = handle(proxy->GenerateIdentityHash(), isolate); | 5157 hash = handle(proxy->GenerateIdentityHash(), isolate); |
5153 proxy->set_hash(*hash); | 5158 proxy->set_hash(*hash); |
5154 return hash; | 5159 return hash; |
5155 } | 5160 } |
5156 | 5161 |
5157 | 5162 |
5158 Object* JSObject::GetHiddenProperty(Name* key) { | 5163 Object* JSObject::GetHiddenProperty(Handle<Name> key) { |
| 5164 DisallowHeapAllocation no_gc; |
5159 ASSERT(key->IsUniqueName()); | 5165 ASSERT(key->IsUniqueName()); |
5160 if (IsJSGlobalProxy()) { | 5166 if (IsJSGlobalProxy()) { |
5161 // For a proxy, use the prototype as target object. | 5167 // For a proxy, use the prototype as target object. |
5162 Object* proxy_parent = GetPrototype(); | 5168 Object* proxy_parent = GetPrototype(); |
5163 // If the proxy is detached, return undefined. | 5169 // If the proxy is detached, return undefined. |
5164 if (proxy_parent->IsNull()) return GetHeap()->the_hole_value(); | 5170 if (proxy_parent->IsNull()) return GetHeap()->the_hole_value(); |
5165 ASSERT(proxy_parent->IsJSGlobalObject()); | 5171 ASSERT(proxy_parent->IsJSGlobalObject()); |
5166 return JSObject::cast(proxy_parent)->GetHiddenProperty(key); | 5172 return JSObject::cast(proxy_parent)->GetHiddenProperty(key); |
5167 } | 5173 } |
5168 ASSERT(!IsJSGlobalProxy()); | 5174 ASSERT(!IsJSGlobalProxy()); |
5169 Object* inline_value = GetHiddenPropertiesHashTable(); | 5175 Object* inline_value = GetHiddenPropertiesHashTable(); |
5170 | 5176 |
5171 if (inline_value->IsSmi()) { | 5177 if (inline_value->IsSmi()) { |
5172 // Handle inline-stored identity hash. | 5178 // Handle inline-stored identity hash. |
5173 if (key == GetHeap()->identity_hash_string()) { | 5179 if (*key == GetHeap()->identity_hash_string()) { |
5174 return inline_value; | 5180 return inline_value; |
5175 } else { | 5181 } else { |
5176 return GetHeap()->the_hole_value(); | 5182 return GetHeap()->the_hole_value(); |
5177 } | 5183 } |
5178 } | 5184 } |
5179 | 5185 |
5180 if (inline_value->IsUndefined()) return GetHeap()->the_hole_value(); | 5186 if (inline_value->IsUndefined()) return GetHeap()->the_hole_value(); |
5181 | 5187 |
5182 ObjectHashTable* hashtable = ObjectHashTable::cast(inline_value); | 5188 ObjectHashTable* hashtable = ObjectHashTable::cast(inline_value); |
5183 Object* entry = hashtable->Lookup(key); | 5189 Object* entry = hashtable->Lookup(*key); |
5184 return entry; | 5190 return entry; |
5185 } | 5191 } |
5186 | 5192 |
5187 | 5193 |
5188 Handle<Object> JSObject::SetHiddenProperty(Handle<JSObject> object, | 5194 Handle<Object> JSObject::SetHiddenProperty(Handle<JSObject> object, |
5189 Handle<Name> key, | 5195 Handle<Name> key, |
5190 Handle<Object> value) { | 5196 Handle<Object> value) { |
5191 Isolate* isolate = object->GetIsolate(); | 5197 Isolate* isolate = object->GetIsolate(); |
5192 | 5198 |
5193 ASSERT(key->IsUniqueName()); | 5199 ASSERT(key->IsUniqueName()); |
(...skipping 12056 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
17250 #define ERROR_MESSAGES_TEXTS(C, T) T, | 17256 #define ERROR_MESSAGES_TEXTS(C, T) T, |
17251 static const char* error_messages_[] = { | 17257 static const char* error_messages_[] = { |
17252 ERROR_MESSAGES_LIST(ERROR_MESSAGES_TEXTS) | 17258 ERROR_MESSAGES_LIST(ERROR_MESSAGES_TEXTS) |
17253 }; | 17259 }; |
17254 #undef ERROR_MESSAGES_TEXTS | 17260 #undef ERROR_MESSAGES_TEXTS |
17255 return error_messages_[reason]; | 17261 return error_messages_[reason]; |
17256 } | 17262 } |
17257 | 17263 |
17258 | 17264 |
17259 } } // namespace v8::internal | 17265 } } // namespace v8::internal |
OLD | NEW |