| Index: src/objects.h
|
| diff --git a/src/objects.h b/src/objects.h
|
| index 71df891cece97a3f4e14bbf703dd03c4120cb202..d22df81e860b595cbaa05bf7fe0ec276a54e1c61 100644
|
| --- a/src/objects.h
|
| +++ b/src/objects.h
|
| @@ -62,11 +62,13 @@
|
| // - JSArray
|
| // - JSArrayBuffer
|
| // - JSArrayBufferView
|
| -// - JSTypedArray
|
| -// - JSDataView
|
| +// - JSTypedArray
|
| +// - JSDataView
|
| // - JSSet
|
| // - JSMap
|
| -// - JSWeakMap
|
| +// - JSWeakCollection
|
| +// - JSWeakMap
|
| +// - JSWeakSet
|
| // - JSRegExp
|
| // - JSFunction
|
| // - JSGeneratorObject
|
| @@ -388,7 +390,7 @@ const int kStubMinorKeyBits = kBitsPerInt - kSmiTagSize - kStubMajorKeyBits;
|
| V(OBJECT_TEMPLATE_INFO_TYPE) \
|
| V(SIGNATURE_INFO_TYPE) \
|
| V(TYPE_SWITCH_INFO_TYPE) \
|
| - V(ALLOCATION_SITE_INFO_TYPE) \
|
| + V(ALLOCATION_MEMENTO_TYPE) \
|
| V(ALLOCATION_SITE_TYPE) \
|
| V(SCRIPT_TYPE) \
|
| V(CODE_CACHE_TYPE) \
|
| @@ -417,6 +419,7 @@ const int kStubMinorKeyBits = kBitsPerInt - kSmiTagSize - kStubMajorKeyBits;
|
| V(JS_DATA_VIEW_TYPE) \
|
| V(JS_PROXY_TYPE) \
|
| V(JS_WEAK_MAP_TYPE) \
|
| + V(JS_WEAK_SET_TYPE) \
|
| V(JS_REGEXP_TYPE) \
|
| \
|
| V(JS_FUNCTION_TYPE) \
|
| @@ -554,7 +557,7 @@ const int kStubMinorKeyBits = kBitsPerInt - kSmiTagSize - kStubMajorKeyBits;
|
| V(TYPE_SWITCH_INFO, TypeSwitchInfo, type_switch_info) \
|
| V(SCRIPT, Script, script) \
|
| V(ALLOCATION_SITE, AllocationSite, allocation_site) \
|
| - V(ALLOCATION_SITE_INFO, AllocationSiteInfo, allocation_site_info) \
|
| + V(ALLOCATION_MEMENTO, AllocationMemento, allocation_memento) \
|
| V(CODE_CACHE, CodeCache, code_cache) \
|
| V(POLYMORPHIC_CODE_CACHE, PolymorphicCodeCache, polymorphic_code_cache) \
|
| V(TYPE_FEEDBACK_INFO, TypeFeedbackInfo, type_feedback_info) \
|
| @@ -581,9 +584,9 @@ const uint32_t kNotStringTag = 0x80;
|
|
|
| // Bit 6 indicates that the object is an internalized string (if set) or not.
|
| // Bit 7 has to be clear as well.
|
| -const uint32_t kIsInternalizedMask = 0x40;
|
| -const uint32_t kNotInternalizedTag = 0x0;
|
| -const uint32_t kInternalizedTag = 0x40;
|
| +const uint32_t kIsNotInternalizedMask = 0x40;
|
| +const uint32_t kNotInternalizedTag = 0x40;
|
| +const uint32_t kInternalizedTag = 0x0;
|
|
|
| // If bit 7 is clear then bit 2 indicates whether the string consists of
|
| // two-byte characters or one-byte characters.
|
| @@ -632,45 +635,62 @@ const uint32_t kShortExternalStringTag = 0x10;
|
| // See heap.cc and mark-compact.cc.
|
| const uint32_t kShortcutTypeMask =
|
| kIsNotStringMask |
|
| - kIsInternalizedMask |
|
| + kIsNotInternalizedMask |
|
| kStringRepresentationMask;
|
| -const uint32_t kShortcutTypeTag = kConsStringTag;
|
| +const uint32_t kShortcutTypeTag = kConsStringTag | kNotInternalizedTag;
|
|
|
|
|
| enum InstanceType {
|
| // String types.
|
| - STRING_TYPE = kTwoByteStringTag | kSeqStringTag,
|
| - ASCII_STRING_TYPE = kOneByteStringTag | kSeqStringTag,
|
| - CONS_STRING_TYPE = kTwoByteStringTag | kConsStringTag,
|
| - CONS_ASCII_STRING_TYPE = kOneByteStringTag | kConsStringTag,
|
| - SLICED_STRING_TYPE = kTwoByteStringTag | kSlicedStringTag,
|
| - SLICED_ASCII_STRING_TYPE = kOneByteStringTag | kSlicedStringTag,
|
| - EXTERNAL_STRING_TYPE = kTwoByteStringTag | kExternalStringTag,
|
| - EXTERNAL_ASCII_STRING_TYPE = kOneByteStringTag | kExternalStringTag,
|
| - EXTERNAL_STRING_WITH_ONE_BYTE_DATA_TYPE =
|
| - EXTERNAL_STRING_TYPE | kOneByteDataHintTag,
|
| - SHORT_EXTERNAL_STRING_TYPE = EXTERNAL_STRING_TYPE | kShortExternalStringTag,
|
| - SHORT_EXTERNAL_ASCII_STRING_TYPE =
|
| - EXTERNAL_ASCII_STRING_TYPE | kShortExternalStringTag,
|
| - SHORT_EXTERNAL_STRING_WITH_ONE_BYTE_DATA_TYPE =
|
| - EXTERNAL_STRING_WITH_ONE_BYTE_DATA_TYPE | kShortExternalStringTag,
|
| -
|
| - INTERNALIZED_STRING_TYPE = STRING_TYPE | kInternalizedTag,
|
| - ASCII_INTERNALIZED_STRING_TYPE = ASCII_STRING_TYPE | kInternalizedTag,
|
| - CONS_INTERNALIZED_STRING_TYPE = CONS_STRING_TYPE | kInternalizedTag,
|
| - CONS_ASCII_INTERNALIZED_STRING_TYPE =
|
| - CONS_ASCII_STRING_TYPE | kInternalizedTag,
|
| - EXTERNAL_INTERNALIZED_STRING_TYPE = EXTERNAL_STRING_TYPE | kInternalizedTag,
|
| - EXTERNAL_ASCII_INTERNALIZED_STRING_TYPE =
|
| - EXTERNAL_ASCII_STRING_TYPE | kInternalizedTag,
|
| + INTERNALIZED_STRING_TYPE = kTwoByteStringTag | kSeqStringTag
|
| + | kInternalizedTag,
|
| + ASCII_INTERNALIZED_STRING_TYPE = kOneByteStringTag | kSeqStringTag
|
| + | kInternalizedTag,
|
| + CONS_INTERNALIZED_STRING_TYPE = kTwoByteStringTag | kConsStringTag
|
| + | kInternalizedTag,
|
| + CONS_ASCII_INTERNALIZED_STRING_TYPE = kOneByteStringTag | kConsStringTag
|
| + | kInternalizedTag,
|
| + EXTERNAL_INTERNALIZED_STRING_TYPE = kTwoByteStringTag | kExternalStringTag
|
| + | kInternalizedTag,
|
| + EXTERNAL_ASCII_INTERNALIZED_STRING_TYPE = kOneByteStringTag
|
| + | kExternalStringTag | kInternalizedTag,
|
| EXTERNAL_INTERNALIZED_STRING_WITH_ONE_BYTE_DATA_TYPE =
|
| - EXTERNAL_STRING_WITH_ONE_BYTE_DATA_TYPE | kInternalizedTag,
|
| + EXTERNAL_INTERNALIZED_STRING_TYPE | kOneByteDataHintTag
|
| + | kInternalizedTag,
|
| SHORT_EXTERNAL_INTERNALIZED_STRING_TYPE =
|
| - SHORT_EXTERNAL_STRING_TYPE | kInternalizedTag,
|
| + EXTERNAL_INTERNALIZED_STRING_TYPE | kShortExternalStringTag
|
| + | kInternalizedTag,
|
| SHORT_EXTERNAL_ASCII_INTERNALIZED_STRING_TYPE =
|
| - SHORT_EXTERNAL_ASCII_STRING_TYPE | kInternalizedTag,
|
| + EXTERNAL_ASCII_INTERNALIZED_STRING_TYPE | kShortExternalStringTag
|
| + | kInternalizedTag,
|
| SHORT_EXTERNAL_INTERNALIZED_STRING_WITH_ONE_BYTE_DATA_TYPE =
|
| - SHORT_EXTERNAL_STRING_WITH_ONE_BYTE_DATA_TYPE | kInternalizedTag,
|
| + EXTERNAL_INTERNALIZED_STRING_WITH_ONE_BYTE_DATA_TYPE
|
| + | kShortExternalStringTag | kInternalizedTag,
|
| +
|
| + STRING_TYPE = INTERNALIZED_STRING_TYPE | kNotInternalizedTag,
|
| + ASCII_STRING_TYPE = ASCII_INTERNALIZED_STRING_TYPE | kNotInternalizedTag,
|
| + CONS_STRING_TYPE = CONS_INTERNALIZED_STRING_TYPE | kNotInternalizedTag,
|
| + CONS_ASCII_STRING_TYPE =
|
| + CONS_ASCII_INTERNALIZED_STRING_TYPE | kNotInternalizedTag,
|
| +
|
| + SLICED_STRING_TYPE =
|
| + kTwoByteStringTag | kSlicedStringTag | kNotInternalizedTag,
|
| + SLICED_ASCII_STRING_TYPE =
|
| + kOneByteStringTag | kSlicedStringTag | kNotInternalizedTag,
|
| + EXTERNAL_STRING_TYPE =
|
| + EXTERNAL_INTERNALIZED_STRING_TYPE | kNotInternalizedTag,
|
| + EXTERNAL_ASCII_STRING_TYPE =
|
| + EXTERNAL_ASCII_INTERNALIZED_STRING_TYPE | kNotInternalizedTag,
|
| + EXTERNAL_STRING_WITH_ONE_BYTE_DATA_TYPE =
|
| + EXTERNAL_INTERNALIZED_STRING_WITH_ONE_BYTE_DATA_TYPE
|
| + | kNotInternalizedTag,
|
| + SHORT_EXTERNAL_STRING_TYPE =
|
| + SHORT_EXTERNAL_INTERNALIZED_STRING_TYPE | kNotInternalizedTag,
|
| + SHORT_EXTERNAL_ASCII_STRING_TYPE =
|
| + SHORT_EXTERNAL_ASCII_INTERNALIZED_STRING_TYPE | kNotInternalizedTag,
|
| + SHORT_EXTERNAL_STRING_WITH_ONE_BYTE_DATA_TYPE =
|
| + SHORT_EXTERNAL_INTERNALIZED_STRING_WITH_ONE_BYTE_DATA_TYPE
|
| + | kNotInternalizedTag,
|
|
|
| // Non-string names
|
| SYMBOL_TYPE = kNotStringTag, // LAST_NAME_TYPE, FIRST_NONSTRING_TYPE
|
| @@ -714,7 +734,7 @@ enum InstanceType {
|
| SIGNATURE_INFO_TYPE,
|
| TYPE_SWITCH_INFO_TYPE,
|
| ALLOCATION_SITE_TYPE,
|
| - ALLOCATION_SITE_INFO_TYPE,
|
| + ALLOCATION_MEMENTO_TYPE,
|
| SCRIPT_TYPE,
|
| CODE_CACHE_TYPE,
|
| POLYMORPHIC_CODE_CACHE_TYPE,
|
| @@ -756,6 +776,7 @@ enum InstanceType {
|
| JS_SET_TYPE,
|
| JS_MAP_TYPE,
|
| JS_WEAK_MAP_TYPE,
|
| + JS_WEAK_SET_TYPE,
|
|
|
| JS_REGEXP_TYPE,
|
|
|
| @@ -924,13 +945,9 @@ class MaybeObject BASE_EMBEDDED {
|
|
|
| #ifdef OBJECT_PRINT
|
| // Prints this object with details.
|
| - inline void Print() {
|
| - Print(stdout);
|
| - }
|
| - inline void PrintLn() {
|
| - PrintLn(stdout);
|
| - }
|
| + void Print();
|
| void Print(FILE* out);
|
| + void PrintLn();
|
| void PrintLn(FILE* out);
|
| #endif
|
| #ifdef VERIFY_HEAP
|
| @@ -1009,7 +1026,9 @@ class MaybeObject BASE_EMBEDDED {
|
| V(JSFunctionProxy) \
|
| V(JSSet) \
|
| V(JSMap) \
|
| + V(JSWeakCollection) \
|
| V(JSWeakMap) \
|
| + V(JSWeakSet) \
|
| V(JSRegExp) \
|
| V(HashTable) \
|
| V(Dictionary) \
|
| @@ -1668,8 +1687,12 @@ class JSReceiver: public HeapObject {
|
| MUST_USE_RESULT MaybeObject* SetPropertyWithDefinedSetter(JSReceiver* setter,
|
| Object* value);
|
|
|
| - MUST_USE_RESULT MaybeObject* DeleteProperty(Name* name, DeleteMode mode);
|
| - MUST_USE_RESULT MaybeObject* DeleteElement(uint32_t index, DeleteMode mode);
|
| + static Handle<Object> DeleteProperty(Handle<JSReceiver> object,
|
| + Handle<Name> name,
|
| + DeleteMode mode = NORMAL_DELETION);
|
| + static Handle<Object> DeleteElement(Handle<JSReceiver> object,
|
| + uint32_t index,
|
| + DeleteMode mode);
|
|
|
| // Set the index'th array element.
|
| // Can cause GC, or return failure if GC is required.
|
| @@ -1913,10 +1936,6 @@ class JSObject: public JSReceiver {
|
| Object* value,
|
| PropertyDetails details);
|
|
|
| - // Deletes the named property in a normalized object.
|
| - MUST_USE_RESULT MaybeObject* DeleteNormalizedProperty(Name* name,
|
| - DeleteMode mode);
|
| -
|
| static void OptimizeAsPrototype(Handle<JSObject> object);
|
| MUST_USE_RESULT MaybeObject* OptimizeAsPrototype();
|
|
|
| @@ -2007,12 +2026,9 @@ class JSObject: public JSReceiver {
|
| MUST_USE_RESULT MaybeObject* GetIdentityHash(CreationFlag flag);
|
| MUST_USE_RESULT MaybeObject* SetIdentityHash(Smi* hash, CreationFlag flag);
|
|
|
| - static Handle<Object> DeleteProperty(Handle<JSObject> obj,
|
| - Handle<Name> name);
|
| - // Can cause GC.
|
| - MUST_USE_RESULT MaybeObject* DeleteProperty(Name* name, DeleteMode mode);
|
| -
|
| - static Handle<Object> DeleteElement(Handle<JSObject> obj, uint32_t index);
|
| + static Handle<Object> DeleteElement(Handle<JSObject> obj,
|
| + uint32_t index,
|
| + DeleteMode mode = NORMAL_DELETION);
|
| MUST_USE_RESULT MaybeObject* DeleteElement(uint32_t index, DeleteMode mode);
|
|
|
| inline void ValidateElements();
|
| @@ -2445,6 +2461,7 @@ class JSObject: public JSReceiver {
|
|
|
| private:
|
| friend class DictionaryElementsAccessor;
|
| + friend class JSReceiver;
|
|
|
| MUST_USE_RESULT MaybeObject* GetElementWithCallback(Object* receiver,
|
| Object* structure,
|
| @@ -2490,9 +2507,19 @@ class JSObject: public JSReceiver {
|
| StrictModeFlag strict_mode,
|
| bool* done);
|
|
|
| - MUST_USE_RESULT MaybeObject* DeletePropertyPostInterceptor(Name* name,
|
| - DeleteMode mode);
|
| - MUST_USE_RESULT MaybeObject* DeletePropertyWithInterceptor(Name* name);
|
| + static Handle<Object> DeleteProperty(Handle<JSObject> object,
|
| + Handle<Name> name,
|
| + DeleteMode mode);
|
| + static Handle<Object> DeletePropertyPostInterceptor(Handle<JSObject> object,
|
| + Handle<Name> name,
|
| + DeleteMode mode);
|
| + static Handle<Object> DeletePropertyWithInterceptor(Handle<JSObject> object,
|
| + Handle<Name> name);
|
| +
|
| + // Deletes the named property in a normalized object.
|
| + static Handle<Object> DeleteNormalizedProperty(Handle<JSObject> object,
|
| + Handle<Name> name,
|
| + DeleteMode mode);
|
|
|
| MUST_USE_RESULT MaybeObject* DeleteElementWithInterceptor(uint32_t index);
|
|
|
| @@ -5338,6 +5365,9 @@ class Map: public HeapObject {
|
| inline void set_is_access_check_needed(bool access_check_needed);
|
| inline bool is_access_check_needed();
|
|
|
| + // Returns true if map has a non-empty stub code cache.
|
| + inline bool has_code_cache();
|
| +
|
| // [prototype]: implicit prototype object.
|
| DECL_ACCESSORS(prototype, Object)
|
|
|
| @@ -5462,6 +5492,7 @@ class Map: public HeapObject {
|
|
|
| MUST_USE_RESULT MaybeObject* RawCopy(int instance_size);
|
| MUST_USE_RESULT MaybeObject* CopyWithPreallocatedFieldDescriptors();
|
| + static Handle<Map> CopyDropDescriptors(Handle<Map> map);
|
| MUST_USE_RESULT MaybeObject* CopyDropDescriptors();
|
| MUST_USE_RESULT MaybeObject* CopyReplaceDescriptors(
|
| DescriptorArray* descriptors,
|
| @@ -6150,11 +6181,6 @@ class SharedFunctionInfo: public HeapObject {
|
| inline int ast_node_count();
|
| inline void set_ast_node_count(int count);
|
|
|
| - // A counter used to determine when to stress the deoptimizer with a
|
| - // deopt.
|
| - inline int stress_deopt_counter();
|
| - inline void set_stress_deopt_counter(int counter);
|
| -
|
| inline int profiler_ticks();
|
|
|
| // Inline cache age is used to infer whether the function survived a context
|
| @@ -6346,10 +6372,9 @@ class SharedFunctionInfo: public HeapObject {
|
| kFunctionTokenPositionOffset + kPointerSize;
|
| static const int kOptCountOffset = kCompilerHintsOffset + kPointerSize;
|
| static const int kCountersOffset = kOptCountOffset + kPointerSize;
|
| - static const int kStressDeoptCounterOffset = kCountersOffset + kPointerSize;
|
|
|
| // Total size.
|
| - static const int kSize = kStressDeoptCounterOffset + kPointerSize;
|
| + static const int kSize = kCountersOffset + kPointerSize;
|
| #else
|
| // The only reason to use smi fields instead of int fields
|
| // is to allow iteration without maps decoding during
|
| @@ -6383,10 +6408,9 @@ class SharedFunctionInfo: public HeapObject {
|
| static const int kOptCountOffset = kCompilerHintsOffset + kIntSize;
|
|
|
| static const int kCountersOffset = kOptCountOffset + kIntSize;
|
| - static const int kStressDeoptCounterOffset = kCountersOffset + kIntSize;
|
|
|
| // Total size.
|
| - static const int kSize = kStressDeoptCounterOffset + kIntSize;
|
| + static const int kSize = kCountersOffset + kIntSize;
|
|
|
| #endif
|
|
|
| @@ -6688,8 +6712,10 @@ class JSFunction: public JSObject {
|
| inline bool has_instance_prototype();
|
| inline Object* prototype();
|
| inline Object* instance_prototype();
|
| - MUST_USE_RESULT MaybeObject* SetInstancePrototype(Object* value);
|
| - MUST_USE_RESULT MaybeObject* SetPrototype(Object* value);
|
| + static void SetPrototype(Handle<JSFunction> function,
|
| + Handle<Object> value);
|
| + static void SetInstancePrototype(Handle<JSFunction> function,
|
| + Handle<Object> value);
|
|
|
| // After prototype is removed, it will not be created when accessed, and
|
| // [[Construct]] from this function will not be allowed.
|
| @@ -7476,11 +7502,10 @@ enum AllocationSiteMode {
|
|
|
| class AllocationSite: public Struct {
|
| public:
|
| - static const int kTransitionInfoOffset = HeapObject::kHeaderSize;
|
| - static const int kSize = kTransitionInfoOffset + kPointerSize;
|
| static const uint32_t kMaximumArrayBytesToPretransition = 8 * 1024;
|
|
|
| DECL_ACCESSORS(transition_info, Object)
|
| + DECL_ACCESSORS(weak_next, Object)
|
|
|
| void Initialize() {
|
| SetElementsKind(GetInitialFastElementsKind());
|
| @@ -7510,12 +7535,20 @@ class AllocationSite: public Struct {
|
| ElementsKind boilerplate_elements_kind);
|
| static inline AllocationSiteMode GetMode(ElementsKind from, ElementsKind to);
|
|
|
| + static const int kTransitionInfoOffset = HeapObject::kHeaderSize;
|
| + static const int kWeakNextOffset = kTransitionInfoOffset + kPointerSize;
|
| + static const int kSize = kWeakNextOffset + kPointerSize;
|
| +
|
| + typedef FixedBodyDescriptor<HeapObject::kHeaderSize,
|
| + kTransitionInfoOffset + kPointerSize,
|
| + kSize> BodyDescriptor;
|
| +
|
| private:
|
| DISALLOW_IMPLICIT_CONSTRUCTORS(AllocationSite);
|
| };
|
|
|
|
|
| -class AllocationSiteInfo: public Struct {
|
| +class AllocationMemento: public Struct {
|
| public:
|
| static const int kAllocationSiteOffset = HeapObject::kHeaderSize;
|
| static const int kSize = kAllocationSiteOffset + kPointerSize;
|
| @@ -7528,15 +7561,15 @@ class AllocationSiteInfo: public Struct {
|
| return AllocationSite::cast(allocation_site());
|
| }
|
|
|
| - DECLARE_PRINTER(AllocationSiteInfo)
|
| - DECLARE_VERIFIER(AllocationSiteInfo)
|
| + DECLARE_PRINTER(AllocationMemento)
|
| + DECLARE_VERIFIER(AllocationMemento)
|
|
|
| - // Returns NULL if no AllocationSiteInfo is available for object.
|
| - static AllocationSiteInfo* FindForJSObject(JSObject* object);
|
| - static inline AllocationSiteInfo* cast(Object* obj);
|
| + // Returns NULL if no AllocationMemento is available for object.
|
| + static AllocationMemento* FindForJSObject(JSObject* object);
|
| + static inline AllocationMemento* cast(Object* obj);
|
|
|
| private:
|
| - DISALLOW_IMPLICIT_CONSTRUCTORS(AllocationSiteInfo);
|
| + DISALLOW_IMPLICIT_CONSTRUCTORS(AllocationMemento);
|
| };
|
|
|
|
|
| @@ -8734,13 +8767,6 @@ class JSProxy: public JSReceiver {
|
| StrictModeFlag strict_mode,
|
| bool* done);
|
|
|
| - MUST_USE_RESULT MaybeObject* DeletePropertyWithHandler(
|
| - Name* name,
|
| - DeleteMode mode);
|
| - MUST_USE_RESULT MaybeObject* DeleteElementWithHandler(
|
| - uint32_t index,
|
| - DeleteMode mode);
|
| -
|
| MUST_USE_RESULT PropertyAttributes GetPropertyAttributeWithHandler(
|
| JSReceiver* receiver,
|
| Name* name);
|
| @@ -8784,6 +8810,15 @@ class JSProxy: public JSReceiver {
|
| kSize> BodyDescriptor;
|
|
|
| private:
|
| + friend class JSReceiver;
|
| +
|
| + static Handle<Object> DeletePropertyWithHandler(Handle<JSProxy> object,
|
| + Handle<Name> name,
|
| + DeleteMode mode);
|
| + static Handle<Object> DeleteElementWithHandler(Handle<JSProxy> object,
|
| + uint32_t index,
|
| + DeleteMode mode);
|
| +
|
| DISALLOW_IMPLICIT_CONSTRUCTORS(JSProxy);
|
| };
|
|
|
| @@ -8863,8 +8898,8 @@ class JSMap: public JSObject {
|
| };
|
|
|
|
|
| -// The JSWeakMap describes EcmaScript Harmony weak maps
|
| -class JSWeakMap: public JSObject {
|
| +// Base class for both JSWeakMap and JSWeakSet
|
| +class JSWeakCollection: public JSObject {
|
| public:
|
| // [table]: the backing hash table mapping keys to values.
|
| DECL_ACCESSORS(table, Object)
|
| @@ -8872,6 +8907,18 @@ class JSWeakMap: public JSObject {
|
| // [next]: linked list of encountered weak maps during GC.
|
| DECL_ACCESSORS(next, Object)
|
|
|
| + static const int kTableOffset = JSObject::kHeaderSize;
|
| + static const int kNextOffset = kTableOffset + kPointerSize;
|
| + static const int kSize = kNextOffset + kPointerSize;
|
| +
|
| + private:
|
| + DISALLOW_IMPLICIT_CONSTRUCTORS(JSWeakCollection);
|
| +};
|
| +
|
| +
|
| +// The JSWeakMap describes EcmaScript Harmony weak maps
|
| +class JSWeakMap: public JSWeakCollection {
|
| + public:
|
| // Casting.
|
| static inline JSWeakMap* cast(Object* obj);
|
|
|
| @@ -8879,15 +8926,26 @@ class JSWeakMap: public JSObject {
|
| DECLARE_PRINTER(JSWeakMap)
|
| DECLARE_VERIFIER(JSWeakMap)
|
|
|
| - static const int kTableOffset = JSObject::kHeaderSize;
|
| - static const int kNextOffset = kTableOffset + kPointerSize;
|
| - static const int kSize = kNextOffset + kPointerSize;
|
| -
|
| private:
|
| DISALLOW_IMPLICIT_CONSTRUCTORS(JSWeakMap);
|
| };
|
|
|
|
|
| +// The JSWeakSet describes EcmaScript Harmony weak sets
|
| +class JSWeakSet: public JSWeakCollection {
|
| + public:
|
| + // Casting.
|
| + static inline JSWeakSet* cast(Object* obj);
|
| +
|
| + // Dispatched behavior.
|
| + DECLARE_PRINTER(JSWeakSet)
|
| + DECLARE_VERIFIER(JSWeakSet)
|
| +
|
| + private:
|
| + DISALLOW_IMPLICIT_CONSTRUCTORS(JSWeakSet);
|
| +};
|
| +
|
| +
|
| class JSArrayBuffer: public JSObject {
|
| public:
|
| // [backing_store]: backing memory for this array
|
|
|