| Index: src/objects.h
|
| diff --git a/src/objects.h b/src/objects.h
|
| index 7ed297340373326cc33c02e3d43173371bf1d04c..25759568a4e15fcf1bf1871e00db454f6f0b9bdf 100644
|
| --- a/src/objects.h
|
| +++ b/src/objects.h
|
| @@ -74,6 +74,7 @@
|
| // - FixedArrayBase
|
| // - ByteArray
|
| // - FixedArray
|
| +// - HiddenPropertiesArray
|
| // - DescriptorArray
|
| // - HashTable
|
| // - Dictionary
|
| @@ -799,6 +800,7 @@ class MaybeObject BASE_EMBEDDED {
|
| V(JSContextExtensionObject) \
|
| V(JSModule) \
|
| V(Map) \
|
| + V(HiddenPropertiesArray) \
|
| V(DescriptorArray) \
|
| V(TransitionArray) \
|
| V(DeoptimizationInputData) \
|
| @@ -2235,16 +2237,15 @@ class JSObject: public JSReceiver {
|
| Object* setter,
|
| PropertyAttributes attributes);
|
|
|
| - // Returns the hidden properties backing store object, currently
|
| - // a StringDictionary, stored on this object.
|
| + // Returns the hidden properties backing store object stored on this object.
|
| // If no hidden properties object has been put on this object,
|
| // return undefined, unless create_if_absent is true, in which case
|
| - // a new dictionary is created, added to this object, and returned.
|
| - MUST_USE_RESULT MaybeObject* GetHiddenPropertiesDictionary(
|
| + // a new backing store is allocated, added to this object, and returned.
|
| + MUST_USE_RESULT MaybeObject* GetHiddenPropertiesArray(
|
| bool create_if_absent);
|
| - // Updates the existing hidden properties dictionary.
|
| - MUST_USE_RESULT MaybeObject* SetHiddenPropertiesDictionary(
|
| - StringDictionary* dictionary);
|
| + // Updates the existing hidden properties backing store.
|
| + MUST_USE_RESULT MaybeObject* SetHiddenPropertiesArray(
|
| + HiddenPropertiesArray* hidden_properties);
|
|
|
| DISALLOW_IMPLICIT_CONSTRUCTORS(JSObject);
|
| };
|
| @@ -2455,6 +2456,29 @@ class FixedDoubleArray: public FixedArrayBase {
|
| DISALLOW_IMPLICIT_CONSTRUCTORS(FixedDoubleArray);
|
| };
|
|
|
| +// HiddenPropertiesArray are fixed arrays used to store hidden properties.
|
| +// Since we expect very few hidden properties, we use store the entries
|
| +// linearly and use linear search for retrieval.
|
| +class HiddenPropertiesArray: public FixedArray {
|
| + public:
|
| + // We allocate the backing store as FixedArray filled with holes.
|
| + MUST_USE_RESULT static inline MaybeObject* Allocate();
|
| +
|
| + // Set a hidden property. Return the current backing store afterwards
|
| + // (the backing store may be re-allocated when extended).
|
| + MUST_USE_RESULT inline MaybeObject* Set(String* key, Object* value);
|
| +
|
| + // If the entry corresponding to the key is found, set the key of the entry
|
| + // to the hole and the value to undefined. This way we can distinguish
|
| + // deleted entries from end of the list when we do linear search.
|
| + inline void Delete(String* key);
|
| + inline Object* Get(String* key);
|
| + static inline HiddenPropertiesArray* cast(Object* obj);
|
| +
|
| + private:
|
| + DISALLOW_IMPLICIT_CONSTRUCTORS(HiddenPropertiesArray);
|
| +};
|
| +
|
|
|
| // DescriptorArrays are fixed arrays used to hold instance descriptors.
|
| // The format of the these objects is:
|
|
|