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