| Index: src/objects.h
|
| diff --git a/src/objects.h b/src/objects.h
|
| index 737ac224d2d221099129fc786d030d1e18c6d032..2abfb9dd816e7325d3f76594fd5561cf9f98fcbf 100644
|
| --- a/src/objects.h
|
| +++ b/src/objects.h
|
| @@ -1802,6 +1802,15 @@ enum GetKeysConversion { KEEP_NUMBERS, CONVERT_TO_STRING };
|
| // JSObject and JSProxy.
|
| class JSReceiver: public HeapObject {
|
| public:
|
| + // [properties]: Backing storage for properties.
|
| + // properties is a FixedArray in the fast case and a Dictionary in the
|
| + // slow case.
|
| + DECL_ACCESSORS(properties, FixedArray) // Get and set fast properties.
|
| + inline void initialize_properties();
|
| + inline bool HasFastProperties();
|
| + // Gets slow properties for non-global objects.
|
| + inline NameDictionary* property_dictionary();
|
| +
|
| DECLARE_CAST(JSReceiver)
|
|
|
| // ES6 section 7.1.1 ToPrimitive
|
| @@ -1960,6 +1969,10 @@ class JSReceiver: public HeapObject {
|
| Handle<JSReceiver> object, KeyCollectionType type, PropertyFilter filter,
|
| GetKeysConversion keys_conversion = KEEP_NUMBERS);
|
|
|
| + // Layout description.
|
| + static const int kPropertiesOffset = HeapObject::kHeaderSize;
|
| + static const int kHeaderSize = HeapObject::kHeaderSize + kPointerSize;
|
| +
|
| private:
|
| DISALLOW_IMPLICIT_CONSTRUCTORS(JSReceiver);
|
| };
|
| @@ -1975,14 +1988,6 @@ class JSObject: public JSReceiver {
|
| Handle<JSFunction> constructor, Handle<JSReceiver> new_target,
|
| Handle<AllocationSite> site = Handle<AllocationSite>::null());
|
|
|
| - // [properties]: Backing storage for properties.
|
| - // properties is a FixedArray in the fast case and a Dictionary in the
|
| - // slow case.
|
| - DECL_ACCESSORS(properties, FixedArray) // Get and set fast properties.
|
| - inline void initialize_properties();
|
| - inline bool HasFastProperties();
|
| - // Gets slow properties for non-global objects.
|
| - inline NameDictionary* property_dictionary();
|
| // Gets global object properties.
|
| inline GlobalDictionary* global_dictionary();
|
|
|
| @@ -2474,13 +2479,12 @@ class JSObject: public JSReceiver {
|
| static const int kFieldsAdded = 3;
|
|
|
| // Layout description.
|
| - static const int kPropertiesOffset = HeapObject::kHeaderSize;
|
| - static const int kElementsOffset = kPropertiesOffset + kPointerSize;
|
| + static const int kElementsOffset = JSReceiver::kHeaderSize;
|
| static const int kHeaderSize = kElementsOffset + kPointerSize;
|
|
|
| STATIC_ASSERT(kHeaderSize == Internals::kJSObjectHeaderSize);
|
|
|
| - typedef FlexibleBodyDescriptor<kPropertiesOffset> BodyDescriptor;
|
| + typedef FlexibleBodyDescriptor<JSReceiver::kPropertiesOffset> BodyDescriptor;
|
|
|
| // Enqueue change record for Object.observe. May cause GC.
|
| MUST_USE_RESULT static MaybeHandle<Object> EnqueueChangeRecord(
|
| @@ -9623,15 +9627,14 @@ class JSProxy: public JSReceiver {
|
| DECLARE_PRINTER(JSProxy)
|
| DECLARE_VERIFIER(JSProxy)
|
|
|
| - // Layout description. We add padding so that a proxy has the same
|
| - // size as a virgin JSObject. This is essential for becoming a JSObject
|
| - // upon freeze.
|
| - static const int kTargetOffset = HeapObject::kHeaderSize;
|
| + // Layout description.
|
| + static const int kTargetOffset = JSReceiver::kHeaderSize;
|
| static const int kHandlerOffset = kTargetOffset + kPointerSize;
|
| static const int kHashOffset = kHandlerOffset + kPointerSize;
|
| static const int kSize = kHashOffset + kPointerSize;
|
|
|
| - typedef FixedBodyDescriptor<kTargetOffset, kSize, kSize> BodyDescriptor;
|
| + typedef FixedBodyDescriptor<JSReceiver::kPropertiesOffset, kSize, kSize>
|
| + BodyDescriptor;
|
|
|
| MUST_USE_RESULT Object* GetIdentityHash();
|
|
|
|
|