| Index: src/objects.h
|
| diff --git a/src/objects.h b/src/objects.h
|
| index 9ef14dbdab6868ed3f2e5461b02be1351dc8f597..8ed90605f1a586a0d303b6449d5552213edc714f 100644
|
| --- a/src/objects.h
|
| +++ b/src/objects.h
|
| @@ -1638,6 +1638,23 @@ class JSObject: public JSReceiver {
|
| MUST_USE_RESULT inline MaybeObject* SetHiddenPropertiesObject(
|
| Object* hidden_obj);
|
|
|
| + // Indicates whether the hidden properties object should be created.
|
| + enum HiddenPropertiesFlag { ALLOW_CREATION, OMIT_CREATION };
|
| +
|
| + // Retrieves the hidden properties object.
|
| + //
|
| + // The undefined value might be returned in case no hidden properties object
|
| + // is present and creation was omitted.
|
| + inline bool HasHiddenProperties();
|
| + MUST_USE_RESULT MaybeObject* GetHiddenProperties(HiddenPropertiesFlag flag);
|
| +
|
| + // Retrieves a permanent object identity hash code.
|
| + //
|
| + // The identity hash is stored as a hidden property. The undefined value might
|
| + // be returned in case no hidden properties object is present and creation was
|
| + // omitted.
|
| + MUST_USE_RESULT MaybeObject* GetIdentityHash(HiddenPropertiesFlag flag);
|
| +
|
| MUST_USE_RESULT MaybeObject* DeleteProperty(String* name, DeleteMode mode);
|
| MUST_USE_RESULT MaybeObject* DeleteElement(uint32_t index, DeleteMode mode);
|
|
|
| @@ -2933,6 +2950,40 @@ class NumberDictionary: public Dictionary<NumberDictionaryShape, uint32_t> {
|
| };
|
|
|
|
|
| +class ObjectHashTableShape {
|
| + public:
|
| + static inline bool IsMatch(JSObject* key, Object* other);
|
| + static inline uint32_t Hash(JSObject* key);
|
| + static inline uint32_t HashForObject(JSObject* key, Object* object);
|
| + MUST_USE_RESULT static inline MaybeObject* AsObject(JSObject* key);
|
| + static const int kPrefixSize = 0;
|
| + static const int kEntrySize = 2;
|
| +};
|
| +
|
| +
|
| +// ObjectHashTable maps keys that are JavaScript objects to object values by
|
| +// using the identity hash of the key for hashing purposes.
|
| +class ObjectHashTable: public HashTable<ObjectHashTableShape, JSObject*> {
|
| + public:
|
| + static inline ObjectHashTable* cast(Object* obj) {
|
| + ASSERT(obj->IsHashTable());
|
| + return reinterpret_cast<ObjectHashTable*>(obj);
|
| + }
|
| +
|
| + // Looks up the value associated with the given key. The undefined value is
|
| + // returned in case the key is not present.
|
| + Object* Lookup(JSObject* key);
|
| +
|
| + // Adds (or overwrites) the value associated with the given key. Mapping a
|
| + // key to the undefined value causes removal of the whole entry.
|
| + MUST_USE_RESULT MaybeObject* Put(JSObject* key, Object* value);
|
| +
|
| + private:
|
| + void AddEntry(int entry, JSObject* key, Object* value);
|
| + void RemoveEntry(int entry);
|
| +};
|
| +
|
| +
|
| // JSFunctionResultCache caches results of some JSFunction invocation.
|
| // It is a fixed array with fixed structure:
|
| // [0]: factory function
|
|
|