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