OLD | NEW |
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 237 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
248 | 248 |
249 | 249 |
250 // NormalizedMapSharingMode is used to specify whether a map may be shared | 250 // NormalizedMapSharingMode is used to specify whether a map may be shared |
251 // by different objects with normalized properties. | 251 // by different objects with normalized properties. |
252 enum NormalizedMapSharingMode { | 252 enum NormalizedMapSharingMode { |
253 UNIQUE_NORMALIZED_MAP, | 253 UNIQUE_NORMALIZED_MAP, |
254 SHARED_NORMALIZED_MAP | 254 SHARED_NORMALIZED_MAP |
255 }; | 255 }; |
256 | 256 |
257 | 257 |
258 // Indicates whether a get method should implicitly create the object looked up. | |
259 enum CreationFlag { | |
260 ALLOW_CREATION, | |
261 OMIT_CREATION | |
262 }; | |
263 | |
264 | |
265 // Indicates whether transitions can be added to a source map or not. | 258 // Indicates whether transitions can be added to a source map or not. |
266 enum TransitionFlag { | 259 enum TransitionFlag { |
267 INSERT_TRANSITION, | 260 INSERT_TRANSITION, |
268 OMIT_TRANSITION | 261 OMIT_TRANSITION |
269 }; | 262 }; |
270 | 263 |
271 | 264 |
272 enum DebugExtraICState { | 265 enum DebugExtraICState { |
273 DEBUG_BREAK, | 266 DEBUG_BREAK, |
274 DEBUG_PREPARE_STEP_IN | 267 DEBUG_PREPARE_STEP_IN |
(...skipping 1227 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1502 uint32_t index); | 1495 uint32_t index); |
1503 // For use when we know that no exception can be thrown. | 1496 // For use when we know that no exception can be thrown. |
1504 inline Object* GetElementNoExceptionThrown(Isolate* isolate, uint32_t index); | 1497 inline Object* GetElementNoExceptionThrown(Isolate* isolate, uint32_t index); |
1505 MUST_USE_RESULT MaybeObject* GetElementWithReceiver(Isolate* isolate, | 1498 MUST_USE_RESULT MaybeObject* GetElementWithReceiver(Isolate* isolate, |
1506 Object* receiver, | 1499 Object* receiver, |
1507 uint32_t index); | 1500 uint32_t index); |
1508 | 1501 |
1509 // Return the object's prototype (might be Heap::null_value()). | 1502 // Return the object's prototype (might be Heap::null_value()). |
1510 Object* GetPrototype(Isolate* isolate); | 1503 Object* GetPrototype(Isolate* isolate); |
1511 | 1504 |
| 1505 // Returns the permanent hash code associated with this object. May return |
| 1506 // undefined if not yet created. |
| 1507 Object* GetHash(); |
| 1508 |
1512 // Returns the permanent hash code associated with this object depending on | 1509 // Returns the permanent hash code associated with this object depending on |
1513 // the actual object type. Might return a failure in case no hash was | 1510 // the actual object type. May create and store a hash code if needed and none |
1514 // created yet or GC was caused by creation. | 1511 // exists. |
1515 MUST_USE_RESULT MaybeObject* GetHash(CreationFlag flag); | 1512 // TODO(rafaelw): Remove isolate parameter when objects.cc is fully |
| 1513 // handlified. |
| 1514 static Handle<Object> GetOrCreateHash(Handle<Object> object, |
| 1515 Isolate* isolate); |
1516 | 1516 |
1517 // Checks whether this object has the same value as the given one. This | 1517 // Checks whether this object has the same value as the given one. This |
1518 // function is implemented according to ES5, section 9.12 and can be used | 1518 // function is implemented according to ES5, section 9.12 and can be used |
1519 // to implement the Harmony "egal" function. | 1519 // to implement the Harmony "egal" function. |
1520 bool SameValue(Object* other); | 1520 bool SameValue(Object* other); |
1521 | 1521 |
1522 // Tries to convert an object to an array index. Returns true and sets | 1522 // Tries to convert an object to an array index. Returns true and sets |
1523 // the output parameter if it succeeds. | 1523 // the output parameter if it succeeds. |
1524 inline bool ToArrayIndex(uint32_t* index); | 1524 inline bool ToArrayIndex(uint32_t* index); |
1525 | 1525 |
(...skipping 470 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1996 inline PropertyAttributes GetElementAttribute(uint32_t index); | 1996 inline PropertyAttributes GetElementAttribute(uint32_t index); |
1997 inline PropertyAttributes GetLocalElementAttribute(uint32_t index); | 1997 inline PropertyAttributes GetLocalElementAttribute(uint32_t index); |
1998 | 1998 |
1999 // Return the object's prototype (might be Heap::null_value()). | 1999 // Return the object's prototype (might be Heap::null_value()). |
2000 inline Object* GetPrototype(); | 2000 inline Object* GetPrototype(); |
2001 | 2001 |
2002 // Return the constructor function (may be Heap::null_value()). | 2002 // Return the constructor function (may be Heap::null_value()). |
2003 inline Object* GetConstructor(); | 2003 inline Object* GetConstructor(); |
2004 | 2004 |
2005 // Retrieves a permanent object identity hash code. The undefined value might | 2005 // Retrieves a permanent object identity hash code. The undefined value might |
2006 // be returned in case no hash was created yet and OMIT_CREATION was used. | 2006 // be returned in case no hash was created yet. |
2007 inline MUST_USE_RESULT MaybeObject* GetIdentityHash(CreationFlag flag); | 2007 inline Object* GetIdentityHash(); |
| 2008 |
| 2009 // Retrieves a permanent object identity hash code. May create and store a |
| 2010 // hash code if needed and none exists. |
| 2011 inline static Handle<Object> GetOrCreateIdentityHash( |
| 2012 Handle<JSReceiver> object); |
2008 | 2013 |
2009 // Lookup a property. If found, the result is valid and has | 2014 // Lookup a property. If found, the result is valid and has |
2010 // detailed information. | 2015 // detailed information. |
2011 void LocalLookup(Name* name, LookupResult* result, | 2016 void LocalLookup(Name* name, LookupResult* result, |
2012 bool search_hidden_prototypes = false); | 2017 bool search_hidden_prototypes = false); |
2013 void Lookup(Name* name, LookupResult* result); | 2018 void Lookup(Name* name, LookupResult* result); |
2014 | 2019 |
2015 protected: | 2020 protected: |
2016 Smi* GenerateIdentityHash(); | 2021 Smi* GenerateIdentityHash(); |
2017 | 2022 |
(...skipping 11 matching lines...) Expand all Loading... |
2029 LookupResult* result, | 2034 LookupResult* result, |
2030 Handle<Name> key, | 2035 Handle<Name> key, |
2031 Handle<Object> value, | 2036 Handle<Object> value, |
2032 PropertyAttributes attributes, | 2037 PropertyAttributes attributes, |
2033 StrictModeFlag strict_mode, | 2038 StrictModeFlag strict_mode, |
2034 StoreFromKeyed store_from_keyed); | 2039 StoreFromKeyed store_from_keyed); |
2035 | 2040 |
2036 DISALLOW_IMPLICIT_CONSTRUCTORS(JSReceiver); | 2041 DISALLOW_IMPLICIT_CONSTRUCTORS(JSReceiver); |
2037 }; | 2042 }; |
2038 | 2043 |
| 2044 // Forward declaration for JSObject::GetOrCreateHiddenPropertiesHashTable. |
| 2045 class ObjectHashTable; |
| 2046 |
2039 // The JSObject describes real heap allocated JavaScript objects with | 2047 // The JSObject describes real heap allocated JavaScript objects with |
2040 // properties. | 2048 // properties. |
2041 // Note that the map of JSObject changes during execution to enable inline | 2049 // Note that the map of JSObject changes during execution to enable inline |
2042 // caching. | 2050 // caching. |
2043 class JSObject: public JSReceiver { | 2051 class JSObject: public JSReceiver { |
2044 public: | 2052 public: |
2045 // [properties]: Backing storage for properties. | 2053 // [properties]: Backing storage for properties. |
2046 // properties is a FixedArray in the fast case and a Dictionary in the | 2054 // properties is a FixedArray in the fast case and a Dictionary in the |
2047 // slow case. | 2055 // slow case. |
2048 DECL_ACCESSORS(properties, FixedArray) // Get and set fast properties. | 2056 DECL_ACCESSORS(properties, FixedArray) // Get and set fast properties. |
(...skipping 231 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2280 // | 2288 // |
2281 // Hidden properties are not local properties of the object itself. | 2289 // Hidden properties are not local properties of the object itself. |
2282 // Instead they are stored in an auxiliary structure kept as a local | 2290 // Instead they are stored in an auxiliary structure kept as a local |
2283 // property with a special name Heap::hidden_string(). But if the | 2291 // property with a special name Heap::hidden_string(). But if the |
2284 // receiver is a JSGlobalProxy then the auxiliary object is a property | 2292 // receiver is a JSGlobalProxy then the auxiliary object is a property |
2285 // of its prototype, and if it's a detached proxy, then you can't have | 2293 // of its prototype, and if it's a detached proxy, then you can't have |
2286 // hidden properties. | 2294 // hidden properties. |
2287 | 2295 |
2288 // Sets a hidden property on this object. Returns this object if successful, | 2296 // Sets a hidden property on this object. Returns this object if successful, |
2289 // undefined if called on a detached proxy. | 2297 // undefined if called on a detached proxy. |
2290 static Handle<Object> SetHiddenProperty(Handle<JSObject> obj, | 2298 static Handle<Object> SetHiddenProperty(Handle<JSObject> object, |
2291 Handle<Name> key, | 2299 Handle<Name> key, |
2292 Handle<Object> value); | 2300 Handle<Object> value); |
2293 // Returns a failure if a GC is required. | |
2294 MUST_USE_RESULT MaybeObject* SetHiddenProperty(Name* key, Object* value); | |
2295 // Gets the value of a hidden property with the given key. Returns the hole | 2301 // Gets the value of a hidden property with the given key. Returns the hole |
2296 // if the property doesn't exist (or if called on a detached proxy), | 2302 // if the property doesn't exist (or if called on a detached proxy), |
2297 // otherwise returns the value set for the key. | 2303 // otherwise returns the value set for the key. |
2298 Object* GetHiddenProperty(Name* key); | 2304 Object* GetHiddenProperty(Name* key); |
2299 // Deletes a hidden property. Deleting a non-existing property is | 2305 // Deletes a hidden property. Deleting a non-existing property is |
2300 // considered successful. | 2306 // considered successful. |
2301 static void DeleteHiddenProperty(Handle<JSObject> object, | 2307 static void DeleteHiddenProperty(Handle<JSObject> object, |
2302 Handle<Name> key); | 2308 Handle<Name> key); |
2303 // Returns true if the object has a property with the hidden string as name. | 2309 // Returns true if the object has a property with the hidden string as name. |
2304 bool HasHiddenProperties(); | 2310 bool HasHiddenProperties(); |
2305 | 2311 |
2306 static int GetIdentityHash(Handle<JSObject> object); | 2312 static void SetIdentityHash(Handle<JSObject> object, Handle<Smi> hash); |
2307 static void SetIdentityHash(Handle<JSObject> object, Smi* hash); | |
2308 | 2313 |
2309 inline void ValidateElements(); | 2314 inline void ValidateElements(); |
2310 | 2315 |
2311 // Makes sure that this object can contain HeapObject as elements. | 2316 // Makes sure that this object can contain HeapObject as elements. |
2312 static inline void EnsureCanContainHeapObjectElements(Handle<JSObject> obj); | 2317 static inline void EnsureCanContainHeapObjectElements(Handle<JSObject> obj); |
2313 | 2318 |
2314 // Makes sure that this object can contain the specified elements. | 2319 // Makes sure that this object can contain the specified elements. |
2315 MUST_USE_RESULT inline MaybeObject* EnsureCanContainElements( | 2320 MUST_USE_RESULT inline MaybeObject* EnsureCanContainElements( |
2316 Object** elements, | 2321 Object** elements, |
2317 uint32_t count, | 2322 uint32_t count, |
(...skipping 533 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2851 v8::AccessControl access_control); | 2856 v8::AccessControl access_control); |
2852 | 2857 |
2853 // Try to define a single accessor paying attention to map transitions. | 2858 // Try to define a single accessor paying attention to map transitions. |
2854 // Returns false if this was not possible and we have to use the slow case. | 2859 // Returns false if this was not possible and we have to use the slow case. |
2855 static bool DefineFastAccessor(Handle<JSObject> object, | 2860 static bool DefineFastAccessor(Handle<JSObject> object, |
2856 Handle<Name> name, | 2861 Handle<Name> name, |
2857 AccessorComponent component, | 2862 AccessorComponent component, |
2858 Handle<Object> accessor, | 2863 Handle<Object> accessor, |
2859 PropertyAttributes attributes); | 2864 PropertyAttributes attributes); |
2860 | 2865 |
2861 enum InitializeHiddenProperties { | |
2862 CREATE_NEW_IF_ABSENT, | |
2863 ONLY_RETURN_INLINE_VALUE | |
2864 }; | |
2865 | 2866 |
2866 // If create_if_absent is true, return the hash table backing store | 2867 // Return the hash table backing store or the inline stored identity hash, |
2867 // for hidden properties. If there is no backing store, allocate one. | 2868 // whatever is found. |
2868 // If create_if_absent is false, return the hash table backing store | 2869 MUST_USE_RESULT Object* GetHiddenPropertiesHashTable(); |
2869 // or the inline stored identity hash, whatever is found. | 2870 |
2870 MUST_USE_RESULT MaybeObject* GetHiddenPropertiesHashTable( | 2871 // Return the hash table backing store for hidden properties. If there is no |
2871 InitializeHiddenProperties init_option); | 2872 // backing store, allocate one. |
| 2873 static Handle<ObjectHashTable> GetOrCreateHiddenPropertiesHashtable( |
| 2874 Handle<JSObject> object); |
| 2875 |
2872 // Set the hidden property backing store to either a hash table or | 2876 // Set the hidden property backing store to either a hash table or |
2873 // the inline-stored identity hash. | 2877 // the inline-stored identity hash. |
2874 MUST_USE_RESULT MaybeObject* SetHiddenPropertiesHashTable( | 2878 static Handle<Object> SetHiddenPropertiesHashTable( |
2875 Object* value); | 2879 Handle<JSObject> object, |
| 2880 Handle<Object> value); |
2876 | 2881 |
2877 MUST_USE_RESULT MaybeObject* GetIdentityHash(CreationFlag flag); | 2882 MUST_USE_RESULT Object* GetIdentityHash(); |
| 2883 |
| 2884 static Handle<Object> GetOrCreateIdentityHash(Handle<JSObject> object); |
2878 | 2885 |
2879 DISALLOW_IMPLICIT_CONSTRUCTORS(JSObject); | 2886 DISALLOW_IMPLICIT_CONSTRUCTORS(JSObject); |
2880 }; | 2887 }; |
2881 | 2888 |
2882 | 2889 |
2883 // Common superclass for FixedArrays that allow implementations to share | 2890 // Common superclass for FixedArrays that allow implementations to share |
2884 // common accessors and some code paths. | 2891 // common accessors and some code paths. |
2885 class FixedArrayBase: public HeapObject { | 2892 class FixedArrayBase: public HeapObject { |
2886 public: | 2893 public: |
2887 // [length]: length of the array. | 2894 // [length]: length of the array. |
(...skipping 589 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3477 static uint32_t HashForObject(Key key, Object* object) { return 0; } | 3484 static uint32_t HashForObject(Key key, Object* object) { return 0; } |
3478 static uint32_t SeededHashForObject(Key key, uint32_t seed, Object* object) { | 3485 static uint32_t SeededHashForObject(Key key, uint32_t seed, Object* object) { |
3479 ASSERT(UsesSeed); | 3486 ASSERT(UsesSeed); |
3480 return HashForObject(key, object); | 3487 return HashForObject(key, object); |
3481 } | 3488 } |
3482 }; | 3489 }; |
3483 | 3490 |
3484 template<typename Shape, typename Key> | 3491 template<typename Shape, typename Key> |
3485 class HashTable: public FixedArray { | 3492 class HashTable: public FixedArray { |
3486 public: | 3493 public: |
3487 enum MinimumCapacity { | |
3488 USE_DEFAULT_MINIMUM_CAPACITY, | |
3489 USE_CUSTOM_MINIMUM_CAPACITY | |
3490 }; | |
3491 | |
3492 // Wrapper methods | 3494 // Wrapper methods |
3493 inline uint32_t Hash(Key key) { | 3495 inline uint32_t Hash(Key key) { |
3494 if (Shape::UsesSeed) { | 3496 if (Shape::UsesSeed) { |
3495 return Shape::SeededHash(key, | 3497 return Shape::SeededHash(key, |
3496 GetHeap()->HashSeed()); | 3498 GetHeap()->HashSeed()); |
3497 } else { | 3499 } else { |
3498 return Shape::Hash(key); | 3500 return Shape::Hash(key); |
3499 } | 3501 } |
3500 } | 3502 } |
3501 | 3503 |
(...skipping 90 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3592 (FixedArray::kMaxLength - kElementsStartOffset) / kEntrySize; | 3594 (FixedArray::kMaxLength - kElementsStartOffset) / kEntrySize; |
3593 | 3595 |
3594 // Find entry for key otherwise return kNotFound. | 3596 // Find entry for key otherwise return kNotFound. |
3595 inline int FindEntry(Key key); | 3597 inline int FindEntry(Key key); |
3596 int FindEntry(Isolate* isolate, Key key); | 3598 int FindEntry(Isolate* isolate, Key key); |
3597 | 3599 |
3598 // Rehashes the table in-place. | 3600 // Rehashes the table in-place. |
3599 void Rehash(Key key); | 3601 void Rehash(Key key); |
3600 | 3602 |
3601 protected: | 3603 protected: |
| 3604 friend class ObjectHashSet; |
| 3605 friend class ObjectHashTable; |
| 3606 |
3602 // Find the entry at which to insert element with the given key that | 3607 // Find the entry at which to insert element with the given key that |
3603 // has the given hash value. | 3608 // has the given hash value. |
3604 uint32_t FindInsertionEntry(uint32_t hash); | 3609 uint32_t FindInsertionEntry(uint32_t hash); |
3605 | 3610 |
3606 // Returns the index for an entry (of the key) | 3611 // Returns the index for an entry (of the key) |
3607 static inline int EntryToIndex(int entry) { | 3612 static inline int EntryToIndex(int entry) { |
3608 return (entry * kEntrySize) + kElementsStartIndex; | 3613 return (entry * kEntrySize) + kElementsStartIndex; |
3609 } | 3614 } |
3610 | 3615 |
3611 // Update the number of elements in the hash table. | 3616 // Update the number of elements in the hash table. |
(...skipping 443 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4055 class ObjectHashSet: public HashTable<ObjectHashTableShape<1>, Object*> { | 4060 class ObjectHashSet: public HashTable<ObjectHashTableShape<1>, Object*> { |
4056 public: | 4061 public: |
4057 static inline ObjectHashSet* cast(Object* obj) { | 4062 static inline ObjectHashSet* cast(Object* obj) { |
4058 ASSERT(obj->IsHashTable()); | 4063 ASSERT(obj->IsHashTable()); |
4059 return reinterpret_cast<ObjectHashSet*>(obj); | 4064 return reinterpret_cast<ObjectHashSet*>(obj); |
4060 } | 4065 } |
4061 | 4066 |
4062 // Looks up whether the given key is part of this hash set. | 4067 // Looks up whether the given key is part of this hash set. |
4063 bool Contains(Object* key); | 4068 bool Contains(Object* key); |
4064 | 4069 |
| 4070 static Handle<ObjectHashSet> EnsureCapacity( |
| 4071 Handle<ObjectHashSet> table, |
| 4072 int n, |
| 4073 Handle<Object> key, |
| 4074 PretenureFlag pretenure = NOT_TENURED); |
| 4075 |
| 4076 // Attempt to shrink hash table after removal of key. |
| 4077 static Handle<ObjectHashSet> Shrink(Handle<ObjectHashSet> table, |
| 4078 Handle<Object> key); |
| 4079 |
4065 // Adds the given key to this hash set. | 4080 // Adds the given key to this hash set. |
4066 MUST_USE_RESULT MaybeObject* Add(Object* key); | 4081 static Handle<ObjectHashSet> Add(Handle<ObjectHashSet> table, |
| 4082 Handle<Object> key); |
4067 | 4083 |
4068 // Removes the given key from this hash set. | 4084 // Removes the given key from this hash set. |
4069 MUST_USE_RESULT MaybeObject* Remove(Object* key); | 4085 static Handle<ObjectHashSet> Remove(Handle<ObjectHashSet> table, |
| 4086 Handle<Object> key); |
4070 }; | 4087 }; |
4071 | 4088 |
4072 | 4089 |
4073 // ObjectHashTable maps keys that are arbitrary objects to object values by | 4090 // ObjectHashTable maps keys that are arbitrary objects to object values by |
4074 // using the identity hash of the key for hashing purposes. | 4091 // using the identity hash of the key for hashing purposes. |
4075 class ObjectHashTable: public HashTable<ObjectHashTableShape<2>, Object*> { | 4092 class ObjectHashTable: public HashTable<ObjectHashTableShape<2>, Object*> { |
4076 public: | 4093 public: |
4077 static inline ObjectHashTable* cast(Object* obj) { | 4094 static inline ObjectHashTable* cast(Object* obj) { |
4078 ASSERT(obj->IsHashTable()); | 4095 ASSERT(obj->IsHashTable()); |
4079 return reinterpret_cast<ObjectHashTable*>(obj); | 4096 return reinterpret_cast<ObjectHashTable*>(obj); |
4080 } | 4097 } |
4081 | 4098 |
| 4099 static Handle<ObjectHashTable> EnsureCapacity( |
| 4100 Handle<ObjectHashTable> table, |
| 4101 int n, |
| 4102 Handle<Object> key, |
| 4103 PretenureFlag pretenure = NOT_TENURED); |
| 4104 |
| 4105 // Attempt to shrink hash table after removal of key. |
| 4106 static Handle<ObjectHashTable> Shrink(Handle<ObjectHashTable> table, |
| 4107 Handle<Object> key); |
| 4108 |
4082 // Looks up the value associated with the given key. The hole value is | 4109 // Looks up the value associated with the given key. The hole value is |
4083 // returned in case the key is not present. | 4110 // returned in case the key is not present. |
4084 Object* Lookup(Object* key); | 4111 Object* Lookup(Object* key); |
4085 | 4112 |
4086 // Adds (or overwrites) the value associated with the given key. Mapping a | 4113 // Adds (or overwrites) the value associated with the given key. Mapping a |
4087 // key to the hole value causes removal of the whole entry. | 4114 // key to the hole value causes removal of the whole entry. |
4088 MUST_USE_RESULT MaybeObject* Put(Object* key, Object* value); | 4115 static Handle<ObjectHashTable> Put(Handle<ObjectHashTable> table, |
| 4116 Handle<Object> key, |
| 4117 Handle<Object> value); |
4089 | 4118 |
4090 private: | 4119 private: |
4091 friend class MarkCompactCollector; | 4120 friend class MarkCompactCollector; |
4092 | 4121 |
4093 void AddEntry(int entry, Object* key, Object* value); | 4122 void AddEntry(int entry, Object* key, Object* value); |
4094 void RemoveEntry(int entry); | 4123 void RemoveEntry(int entry); |
4095 | 4124 |
4096 // Returns the index to the value of an entry. | 4125 // Returns the index to the value of an entry. |
4097 static inline int EntryToValueIndex(int entry) { | 4126 static inline int EntryToValueIndex(int entry) { |
4098 return EntryToIndex(entry) + 1; | 4127 return EntryToIndex(entry) + 1; |
(...skipping 5251 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
9350 static bool HasPropertyWithHandler(Handle<JSProxy> proxy, Handle<Name> name); | 9379 static bool HasPropertyWithHandler(Handle<JSProxy> proxy, Handle<Name> name); |
9351 static bool HasElementWithHandler(Handle<JSProxy> proxy, uint32_t index); | 9380 static bool HasElementWithHandler(Handle<JSProxy> proxy, uint32_t index); |
9352 | 9381 |
9353 static Handle<Object> DeletePropertyWithHandler(Handle<JSProxy> proxy, | 9382 static Handle<Object> DeletePropertyWithHandler(Handle<JSProxy> proxy, |
9354 Handle<Name> name, | 9383 Handle<Name> name, |
9355 DeleteMode mode); | 9384 DeleteMode mode); |
9356 static Handle<Object> DeleteElementWithHandler(Handle<JSProxy> proxy, | 9385 static Handle<Object> DeleteElementWithHandler(Handle<JSProxy> proxy, |
9357 uint32_t index, | 9386 uint32_t index, |
9358 DeleteMode mode); | 9387 DeleteMode mode); |
9359 | 9388 |
9360 MUST_USE_RESULT MaybeObject* GetIdentityHash(CreationFlag flag); | 9389 MUST_USE_RESULT Object* GetIdentityHash(); |
9361 static Handle<Object> GetIdentityHash(Handle<JSProxy> proxy, | 9390 |
9362 CreationFlag flag); | 9391 static Handle<Object> GetOrCreateIdentityHash(Handle<JSProxy> proxy); |
9363 | 9392 |
9364 DISALLOW_IMPLICIT_CONSTRUCTORS(JSProxy); | 9393 DISALLOW_IMPLICIT_CONSTRUCTORS(JSProxy); |
9365 }; | 9394 }; |
9366 | 9395 |
9367 | 9396 |
9368 class JSFunctionProxy: public JSProxy { | 9397 class JSFunctionProxy: public JSProxy { |
9369 public: | 9398 public: |
9370 // [call_trap]: The call trap. | 9399 // [call_trap]: The call trap. |
9371 DECL_ACCESSORS(call_trap, Object) | 9400 DECL_ACCESSORS(call_trap, Object) |
9372 | 9401 |
(...skipping 1067 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
10440 } else { | 10469 } else { |
10441 value &= ~(1 << bit_position); | 10470 value &= ~(1 << bit_position); |
10442 } | 10471 } |
10443 return value; | 10472 return value; |
10444 } | 10473 } |
10445 }; | 10474 }; |
10446 | 10475 |
10447 } } // namespace v8::internal | 10476 } } // namespace v8::internal |
10448 | 10477 |
10449 #endif // V8_OBJECTS_H_ | 10478 #endif // V8_OBJECTS_H_ |
OLD | NEW |