| OLD | NEW |
| 1 // Copyright 2013 the V8 project authors. All rights reserved. | 1 // Copyright 2013 the V8 project authors. All rights reserved. |
| 2 // Redistribution and use in source and binary forms, with or without | 2 // Redistribution and use in source and binary forms, with or without |
| 3 // modification, are permitted provided that the following conditions are | 3 // modification, are permitted provided that the following conditions are |
| 4 // met: | 4 // met: |
| 5 // | 5 // |
| 6 // * Redistributions of source code must retain the above copyright | 6 // * Redistributions of source code must retain the above copyright |
| 7 // notice, this list of conditions and the following disclaimer. | 7 // notice, this list of conditions and the following disclaimer. |
| 8 // * Redistributions in binary form must reproduce the above | 8 // * Redistributions in binary form must reproduce the above |
| 9 // copyright notice, this list of conditions and the following | 9 // copyright notice, this list of conditions and the following |
| 10 // disclaimer in the documentation and/or other materials provided | 10 // disclaimer in the documentation and/or other materials provided |
| (...skipping 4825 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4836 // If adding the key expanded the dictionary (i.e., Add returned a new | 4836 // If adding the key expanded the dictionary (i.e., Add returned a new |
| 4837 // dictionary), store it back to the object. | 4837 // dictionary), store it back to the object. |
| 4838 MaybeObject* store_result = SetHiddenPropertiesHashTable(new_table); | 4838 MaybeObject* store_result = SetHiddenPropertiesHashTable(new_table); |
| 4839 if (store_result->IsFailure()) return store_result; | 4839 if (store_result->IsFailure()) return store_result; |
| 4840 } | 4840 } |
| 4841 // Return this to mark success. | 4841 // Return this to mark success. |
| 4842 return this; | 4842 return this; |
| 4843 } | 4843 } |
| 4844 | 4844 |
| 4845 | 4845 |
| 4846 void JSObject::DeleteHiddenProperty(Name* key) { | 4846 void JSObject::DeleteHiddenProperty(Handle<JSObject> object, Handle<Name> key) { |
| 4847 Isolate* isolate = object->GetIsolate(); |
| 4847 ASSERT(key->IsUniqueName()); | 4848 ASSERT(key->IsUniqueName()); |
| 4848 if (IsJSGlobalProxy()) { | 4849 |
| 4849 // For a proxy, use the prototype as target object. | 4850 if (object->IsJSGlobalProxy()) { |
| 4850 Object* proxy_parent = GetPrototype(); | 4851 Handle<Object> proto(object->GetPrototype(), isolate); |
| 4851 // If the proxy is detached, return immediately. | 4852 if (proto->IsNull()) return; |
| 4852 if (proxy_parent->IsNull()) return; | 4853 ASSERT(proto->IsJSGlobalObject()); |
| 4853 ASSERT(proxy_parent->IsJSGlobalObject()); | 4854 return DeleteHiddenProperty(Handle<JSObject>::cast(proto), key); |
| 4854 JSObject::cast(proxy_parent)->DeleteHiddenProperty(key); | |
| 4855 return; | |
| 4856 } | 4855 } |
| 4857 ASSERT(!IsJSGlobalProxy()); | 4856 |
| 4858 MaybeObject* hidden_lookup = | 4857 MaybeObject* hidden_lookup = |
| 4859 GetHiddenPropertiesHashTable(ONLY_RETURN_INLINE_VALUE); | 4858 object->GetHiddenPropertiesHashTable(ONLY_RETURN_INLINE_VALUE); |
| 4860 Object* inline_value = hidden_lookup->ToObjectUnchecked(); | 4859 Object* inline_value = hidden_lookup->ToObjectUnchecked(); |
| 4861 | 4860 |
| 4862 // We never delete (inline-stored) identity hashes. | 4861 // We never delete (inline-stored) identity hashes. |
| 4863 ASSERT(key != GetHeap()->identity_hash_string()); | 4862 ASSERT(*key != isolate->heap()->identity_hash_string()); |
| 4864 if (inline_value->IsUndefined() || inline_value->IsSmi()) return; | 4863 if (inline_value->IsUndefined() || inline_value->IsSmi()) return; |
| 4865 | 4864 |
| 4866 ObjectHashTable* hashtable = ObjectHashTable::cast(inline_value); | 4865 Handle<ObjectHashTable> hashtable(ObjectHashTable::cast(inline_value)); |
| 4867 MaybeObject* delete_result = hashtable->Put(key, GetHeap()->the_hole_value()); | 4866 PutIntoObjectHashTable(hashtable, key, isolate->factory()->the_hole_value()); |
| 4868 USE(delete_result); | |
| 4869 ASSERT(!delete_result->IsFailure()); // Delete does not cause GC. | |
| 4870 } | 4867 } |
| 4871 | 4868 |
| 4872 | 4869 |
| 4873 bool JSObject::HasHiddenProperties() { | 4870 bool JSObject::HasHiddenProperties() { |
| 4874 return GetPropertyAttributePostInterceptor(this, | 4871 return GetPropertyAttributePostInterceptor(this, |
| 4875 GetHeap()->hidden_string(), | 4872 GetHeap()->hidden_string(), |
| 4876 false) != ABSENT; | 4873 false) != ABSENT; |
| 4877 } | 4874 } |
| 4878 | 4875 |
| 4879 | 4876 |
| (...skipping 11112 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 15992 #define ERROR_MESSAGES_TEXTS(C, T) T, | 15989 #define ERROR_MESSAGES_TEXTS(C, T) T, |
| 15993 static const char* error_messages_[] = { | 15990 static const char* error_messages_[] = { |
| 15994 ERROR_MESSAGES_LIST(ERROR_MESSAGES_TEXTS) | 15991 ERROR_MESSAGES_LIST(ERROR_MESSAGES_TEXTS) |
| 15995 }; | 15992 }; |
| 15996 #undef ERROR_MESSAGES_TEXTS | 15993 #undef ERROR_MESSAGES_TEXTS |
| 15997 return error_messages_[reason]; | 15994 return error_messages_[reason]; |
| 15998 } | 15995 } |
| 15999 | 15996 |
| 16000 | 15997 |
| 16001 } } // namespace v8::internal | 15998 } } // namespace v8::internal |
| OLD | NEW |