Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(11)

Side by Side Diff: src/objects.h

Issue 18774002: Handlify JSReceiver/JSObject::DeleteProperty method. (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: Created 7 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « src/isolate.h ('k') | src/objects.cc » ('j') | src/objects.cc » ('J')
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2012 the V8 project authors. All rights reserved. 1 // Copyright 2012 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 1645 matching lines...) Expand 10 before | Expand all | Expand 10 after
1656 MUST_USE_RESULT MaybeObject* SetProperty( 1656 MUST_USE_RESULT MaybeObject* SetProperty(
1657 LookupResult* result, 1657 LookupResult* result,
1658 Name* key, 1658 Name* key,
1659 Object* value, 1659 Object* value,
1660 PropertyAttributes attributes, 1660 PropertyAttributes attributes,
1661 StrictModeFlag strict_mode, 1661 StrictModeFlag strict_mode,
1662 StoreFromKeyed store_from_keyed = MAY_BE_STORE_FROM_KEYED); 1662 StoreFromKeyed store_from_keyed = MAY_BE_STORE_FROM_KEYED);
1663 MUST_USE_RESULT MaybeObject* SetPropertyWithDefinedSetter(JSReceiver* setter, 1663 MUST_USE_RESULT MaybeObject* SetPropertyWithDefinedSetter(JSReceiver* setter,
1664 Object* value); 1664 Object* value);
1665 1665
1666 MUST_USE_RESULT MaybeObject* DeleteProperty(Name* name, DeleteMode mode); 1666 static Handle<Object> DeleteProperty(Handle<JSReceiver> object,
1667 Handle<Name> name,
1668 DeleteMode mode = NORMAL_DELETION);
1667 MUST_USE_RESULT MaybeObject* DeleteElement(uint32_t index, DeleteMode mode); 1669 MUST_USE_RESULT MaybeObject* DeleteElement(uint32_t index, DeleteMode mode);
1668 1670
1669 // Set the index'th array element. 1671 // Set the index'th array element.
1670 // Can cause GC, or return failure if GC is required. 1672 // Can cause GC, or return failure if GC is required.
1671 MUST_USE_RESULT MaybeObject* SetElement(uint32_t index, 1673 MUST_USE_RESULT MaybeObject* SetElement(uint32_t index,
1672 Object* value, 1674 Object* value,
1673 PropertyAttributes attributes, 1675 PropertyAttributes attributes,
1674 StrictModeFlag strict_mode, 1676 StrictModeFlag strict_mode,
1675 bool check_prototype); 1677 bool check_prototype);
1676 1678
(...skipping 217 matching lines...) Expand 10 before | Expand all | Expand 10 after
1894 // Handles the special representation of JS global objects. 1896 // Handles the special representation of JS global objects.
1895 static Handle<Object> SetNormalizedProperty(Handle<JSObject> object, 1897 static Handle<Object> SetNormalizedProperty(Handle<JSObject> object,
1896 Handle<Name> key, 1898 Handle<Name> key,
1897 Handle<Object> value, 1899 Handle<Object> value,
1898 PropertyDetails details); 1900 PropertyDetails details);
1899 1901
1900 MUST_USE_RESULT MaybeObject* SetNormalizedProperty(Name* name, 1902 MUST_USE_RESULT MaybeObject* SetNormalizedProperty(Name* name,
1901 Object* value, 1903 Object* value,
1902 PropertyDetails details); 1904 PropertyDetails details);
1903 1905
1904 // Deletes the named property in a normalized object.
1905 MUST_USE_RESULT MaybeObject* DeleteNormalizedProperty(Name* name,
1906 DeleteMode mode);
1907
1908 static void OptimizeAsPrototype(Handle<JSObject> object); 1906 static void OptimizeAsPrototype(Handle<JSObject> object);
1909 MUST_USE_RESULT MaybeObject* OptimizeAsPrototype(); 1907 MUST_USE_RESULT MaybeObject* OptimizeAsPrototype();
1910 1908
1911 // Retrieve interceptors. 1909 // Retrieve interceptors.
1912 InterceptorInfo* GetNamedInterceptor(); 1910 InterceptorInfo* GetNamedInterceptor();
1913 InterceptorInfo* GetIndexedInterceptor(); 1911 InterceptorInfo* GetIndexedInterceptor();
1914 1912
1915 // Used from JSReceiver. 1913 // Used from JSReceiver.
1916 PropertyAttributes GetPropertyAttributePostInterceptor(JSObject* receiver, 1914 PropertyAttributes GetPropertyAttributePostInterceptor(JSObject* receiver,
1917 Name* name, 1915 Name* name,
(...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after
1988 // Deletes a hidden property. Deleting a non-existing property is 1986 // Deletes a hidden property. Deleting a non-existing property is
1989 // considered successful. 1987 // considered successful.
1990 void DeleteHiddenProperty(Name* key); 1988 void DeleteHiddenProperty(Name* key);
1991 // Returns true if the object has a property with the hidden string as name. 1989 // Returns true if the object has a property with the hidden string as name.
1992 bool HasHiddenProperties(); 1990 bool HasHiddenProperties();
1993 1991
1994 static int GetIdentityHash(Handle<JSObject> obj); 1992 static int GetIdentityHash(Handle<JSObject> obj);
1995 MUST_USE_RESULT MaybeObject* GetIdentityHash(CreationFlag flag); 1993 MUST_USE_RESULT MaybeObject* GetIdentityHash(CreationFlag flag);
1996 MUST_USE_RESULT MaybeObject* SetIdentityHash(Smi* hash, CreationFlag flag); 1994 MUST_USE_RESULT MaybeObject* SetIdentityHash(Smi* hash, CreationFlag flag);
1997 1995
1998 static Handle<Object> DeleteProperty(Handle<JSObject> obj,
1999 Handle<Name> name);
2000 // Can cause GC.
2001 MUST_USE_RESULT MaybeObject* DeleteProperty(Name* name, DeleteMode mode);
2002
2003 static Handle<Object> DeleteElement(Handle<JSObject> obj, uint32_t index); 1996 static Handle<Object> DeleteElement(Handle<JSObject> obj, uint32_t index);
2004 MUST_USE_RESULT MaybeObject* DeleteElement(uint32_t index, DeleteMode mode); 1997 MUST_USE_RESULT MaybeObject* DeleteElement(uint32_t index, DeleteMode mode);
2005 1998
2006 inline void ValidateElements(); 1999 inline void ValidateElements();
2007 2000
2008 // Makes sure that this object can contain HeapObject as elements. 2001 // Makes sure that this object can contain HeapObject as elements.
2009 MUST_USE_RESULT inline MaybeObject* EnsureCanContainHeapObjectElements(); 2002 MUST_USE_RESULT inline MaybeObject* EnsureCanContainHeapObjectElements();
2010 2003
2011 // Makes sure that this object can contain the specified elements. 2004 // Makes sure that this object can contain the specified elements.
2012 MUST_USE_RESULT inline MaybeObject* EnsureCanContainElements( 2005 MUST_USE_RESULT inline MaybeObject* EnsureCanContainElements(
(...skipping 410 matching lines...) Expand 10 before | Expand all | Expand 10 after
2423 static void EnqueueChangeRecord(Handle<JSObject> object, 2416 static void EnqueueChangeRecord(Handle<JSObject> object,
2424 const char* type, 2417 const char* type,
2425 Handle<Name> name, 2418 Handle<Name> name,
2426 Handle<Object> old_value); 2419 Handle<Object> old_value);
2427 2420
2428 // Deliver change records to observers. May cause GC. 2421 // Deliver change records to observers. May cause GC.
2429 static void DeliverChangeRecords(Isolate* isolate); 2422 static void DeliverChangeRecords(Isolate* isolate);
2430 2423
2431 private: 2424 private:
2432 friend class DictionaryElementsAccessor; 2425 friend class DictionaryElementsAccessor;
2426 friend class JSReceiver;
2433 2427
2434 MUST_USE_RESULT MaybeObject* GetElementWithCallback(Object* receiver, 2428 MUST_USE_RESULT MaybeObject* GetElementWithCallback(Object* receiver,
2435 Object* structure, 2429 Object* structure,
2436 uint32_t index, 2430 uint32_t index,
2437 Object* holder); 2431 Object* holder);
2438 MUST_USE_RESULT PropertyAttributes GetElementAttributeWithInterceptor( 2432 MUST_USE_RESULT PropertyAttributes GetElementAttributeWithInterceptor(
2439 JSReceiver* receiver, 2433 JSReceiver* receiver,
2440 uint32_t index, 2434 uint32_t index,
2441 bool continue_search); 2435 bool continue_search);
2442 MUST_USE_RESULT PropertyAttributes GetElementAttributeWithoutInterceptor( 2436 MUST_USE_RESULT PropertyAttributes GetElementAttributeWithoutInterceptor(
(...skipping 25 matching lines...) Expand all
2468 // has a setter, invoke it and set '*done' to true. If it is found and is 2462 // has a setter, invoke it and set '*done' to true. If it is found and is
2469 // read-only, reject and set '*done' to true. Otherwise, set '*done' to 2463 // read-only, reject and set '*done' to true. Otherwise, set '*done' to
2470 // false. Can cause GC and can return a failure result with '*done==true'. 2464 // false. Can cause GC and can return a failure result with '*done==true'.
2471 MUST_USE_RESULT MaybeObject* SetPropertyViaPrototypes( 2465 MUST_USE_RESULT MaybeObject* SetPropertyViaPrototypes(
2472 Name* name, 2466 Name* name,
2473 Object* value, 2467 Object* value,
2474 PropertyAttributes attributes, 2468 PropertyAttributes attributes,
2475 StrictModeFlag strict_mode, 2469 StrictModeFlag strict_mode,
2476 bool* done); 2470 bool* done);
2477 2471
2478 MUST_USE_RESULT MaybeObject* DeletePropertyPostInterceptor(Name* name, 2472 static Handle<Object> DeleteProperty(Handle<JSObject> object,
2479 DeleteMode mode); 2473 Handle<Name> name,
2480 MUST_USE_RESULT MaybeObject* DeletePropertyWithInterceptor(Name* name); 2474 DeleteMode mode);
2475 static Handle<Object> DeletePropertyPostInterceptor(Handle<JSObject> object,
2476 Handle<Name> name,
2477 DeleteMode mode);
2478 static Handle<Object> DeletePropertyWithInterceptor(Handle<JSObject> object,
2479 Handle<Name> name);
2480
2481 // Deletes the named property in a normalized object.
2482 static Handle<Object> DeleteNormalizedProperty(Handle<JSObject> object,
2483 Handle<Name> name,
2484 DeleteMode mode);
2481 2485
2482 MUST_USE_RESULT MaybeObject* DeleteElementWithInterceptor(uint32_t index); 2486 MUST_USE_RESULT MaybeObject* DeleteElementWithInterceptor(uint32_t index);
2483 2487
2484 MUST_USE_RESULT MaybeObject* DeleteFastElement(uint32_t index); 2488 MUST_USE_RESULT MaybeObject* DeleteFastElement(uint32_t index);
2485 MUST_USE_RESULT MaybeObject* DeleteDictionaryElement(uint32_t index, 2489 MUST_USE_RESULT MaybeObject* DeleteDictionaryElement(uint32_t index,
2486 DeleteMode mode); 2490 DeleteMode mode);
2487 2491
2488 bool ReferencesObjectFromElements(FixedArray* elements, 2492 bool ReferencesObjectFromElements(FixedArray* elements,
2489 ElementsKind kind, 2493 ElementsKind kind,
2490 Object* object); 2494 Object* object);
(...skipping 2953 matching lines...) Expand 10 before | Expand all | Expand 10 after
5444 inline bool is_deprecated(); 5448 inline bool is_deprecated();
5445 inline bool CanBeDeprecated(); 5449 inline bool CanBeDeprecated();
5446 // Returns a non-deprecated version of the input. If the input was not 5450 // Returns a non-deprecated version of the input. If the input was not
5447 // deprecated, it is directly returned. Otherwise, the non-deprecated version 5451 // deprecated, it is directly returned. Otherwise, the non-deprecated version
5448 // is found by re-transitioning from the root of the transition tree using the 5452 // is found by re-transitioning from the root of the transition tree using the
5449 // descriptor array of the map. Returns NULL if no updated map is found. 5453 // descriptor array of the map. Returns NULL if no updated map is found.
5450 Map* CurrentMapForDeprecated(); 5454 Map* CurrentMapForDeprecated();
5451 5455
5452 MUST_USE_RESULT MaybeObject* RawCopy(int instance_size); 5456 MUST_USE_RESULT MaybeObject* RawCopy(int instance_size);
5453 MUST_USE_RESULT MaybeObject* CopyWithPreallocatedFieldDescriptors(); 5457 MUST_USE_RESULT MaybeObject* CopyWithPreallocatedFieldDescriptors();
5458 static Handle<Map> CopyDropDescriptors(Handle<Map> map);
5454 MUST_USE_RESULT MaybeObject* CopyDropDescriptors(); 5459 MUST_USE_RESULT MaybeObject* CopyDropDescriptors();
5455 MUST_USE_RESULT MaybeObject* CopyReplaceDescriptors( 5460 MUST_USE_RESULT MaybeObject* CopyReplaceDescriptors(
5456 DescriptorArray* descriptors, 5461 DescriptorArray* descriptors,
5457 TransitionFlag flag, 5462 TransitionFlag flag,
5458 Name* name = NULL, 5463 Name* name = NULL,
5459 SimpleTransitionFlag simple_flag = FULL_TRANSITION); 5464 SimpleTransitionFlag simple_flag = FULL_TRANSITION);
5460 MUST_USE_RESULT MaybeObject* CopyInstallDescriptors( 5465 MUST_USE_RESULT MaybeObject* CopyInstallDescriptors(
5461 int new_descriptor, 5466 int new_descriptor,
5462 DescriptorArray* descriptors); 5467 DescriptorArray* descriptors);
5463 MUST_USE_RESULT MaybeObject* ShareDescriptor(DescriptorArray* descriptors, 5468 MUST_USE_RESULT MaybeObject* ShareDescriptor(DescriptorArray* descriptors,
(...skipping 3191 matching lines...) Expand 10 before | Expand all | Expand 10 after
8655 // that is read-only, throw. In all these cases set '*done' to true, 8660 // that is read-only, throw. In all these cases set '*done' to true,
8656 // otherwise set it to false. 8661 // otherwise set it to false.
8657 MUST_USE_RESULT MaybeObject* SetPropertyViaPrototypesWithHandler( 8662 MUST_USE_RESULT MaybeObject* SetPropertyViaPrototypesWithHandler(
8658 JSReceiver* receiver, 8663 JSReceiver* receiver,
8659 Name* name, 8664 Name* name,
8660 Object* value, 8665 Object* value,
8661 PropertyAttributes attributes, 8666 PropertyAttributes attributes,
8662 StrictModeFlag strict_mode, 8667 StrictModeFlag strict_mode,
8663 bool* done); 8668 bool* done);
8664 8669
8665 MUST_USE_RESULT MaybeObject* DeletePropertyWithHandler(
8666 Name* name,
8667 DeleteMode mode);
8668 MUST_USE_RESULT MaybeObject* DeleteElementWithHandler(
8669 uint32_t index,
8670 DeleteMode mode);
8671
8672 MUST_USE_RESULT PropertyAttributes GetPropertyAttributeWithHandler( 8670 MUST_USE_RESULT PropertyAttributes GetPropertyAttributeWithHandler(
8673 JSReceiver* receiver, 8671 JSReceiver* receiver,
8674 Name* name); 8672 Name* name);
8675 MUST_USE_RESULT PropertyAttributes GetElementAttributeWithHandler( 8673 MUST_USE_RESULT PropertyAttributes GetElementAttributeWithHandler(
8676 JSReceiver* receiver, 8674 JSReceiver* receiver,
8677 uint32_t index); 8675 uint32_t index);
8678 8676
8679 MUST_USE_RESULT MaybeObject* GetIdentityHash(CreationFlag flag); 8677 MUST_USE_RESULT MaybeObject* GetIdentityHash(CreationFlag flag);
8680 8678
8681 // Turn this into an (empty) JSObject. 8679 // Turn this into an (empty) JSObject.
(...skipping 23 matching lines...) Expand all
8705 static const int kHeaderSize = kPaddingOffset; 8703 static const int kHeaderSize = kPaddingOffset;
8706 static const int kPaddingSize = kSize - kPaddingOffset; 8704 static const int kPaddingSize = kSize - kPaddingOffset;
8707 8705
8708 STATIC_CHECK(kPaddingSize >= 0); 8706 STATIC_CHECK(kPaddingSize >= 0);
8709 8707
8710 typedef FixedBodyDescriptor<kHandlerOffset, 8708 typedef FixedBodyDescriptor<kHandlerOffset,
8711 kPaddingOffset, 8709 kPaddingOffset,
8712 kSize> BodyDescriptor; 8710 kSize> BodyDescriptor;
8713 8711
8714 private: 8712 private:
8713 friend class JSReceiver;
8714
8715 static Handle<Object> DeletePropertyWithHandler(Handle<JSProxy> object,
8716 Handle<Name> name,
8717 DeleteMode mode);
8718 MUST_USE_RESULT MaybeObject* DeleteElementWithHandler(uint32_t index,
8719 DeleteMode mode);
8720
8715 DISALLOW_IMPLICIT_CONSTRUCTORS(JSProxy); 8721 DISALLOW_IMPLICIT_CONSTRUCTORS(JSProxy);
8716 }; 8722 };
8717 8723
8718 8724
8719 class JSFunctionProxy: public JSProxy { 8725 class JSFunctionProxy: public JSProxy {
8720 public: 8726 public:
8721 // [call_trap]: The call trap. 8727 // [call_trap]: The call trap.
8722 DECL_ACCESSORS(call_trap, Object) 8728 DECL_ACCESSORS(call_trap, Object)
8723 8729
8724 // [construct_trap]: The construct trap. 8730 // [construct_trap]: The construct trap.
(...skipping 1018 matching lines...) Expand 10 before | Expand all | Expand 10 after
9743 } else { 9749 } else {
9744 value &= ~(1 << bit_position); 9750 value &= ~(1 << bit_position);
9745 } 9751 }
9746 return value; 9752 return value;
9747 } 9753 }
9748 }; 9754 };
9749 9755
9750 } } // namespace v8::internal 9756 } } // namespace v8::internal
9751 9757
9752 #endif // V8_OBJECTS_H_ 9758 #endif // V8_OBJECTS_H_
OLDNEW
« no previous file with comments | « src/isolate.h ('k') | src/objects.cc » ('j') | src/objects.cc » ('J')

Powered by Google App Engine
This is Rietveld 408576698