| Index: src/objects.h
|
| diff --git a/src/objects.h b/src/objects.h
|
| index 0001eb5dd4c4a889a6ea7110efc92cbe8cb0f644..62e80e7a5a4094fb802195ec5c832df86b368f89 100644
|
| --- a/src/objects.h
|
| +++ b/src/objects.h
|
| @@ -247,12 +247,12 @@ enum PropertyNormalizationMode {
|
| };
|
|
|
|
|
| -// NormalizedMapSharingMode is used to specify whether a map may be shared
|
| -// by different objects with normalized properties.
|
| -enum NormalizedMapSharingMode {
|
| - UNIQUE_NORMALIZED_MAP,
|
| - SHARED_NORMALIZED_MAP
|
| -};
|
| +// Indicates how aggressively the prototype should be optimized. FAST_PROTOTYPE
|
| +// will give the fastest result by tailoring the map to the prototype, but that
|
| +// will cause polymorphism with other objects. REGULAR_PROTOTYPE is to be used
|
| +// (at least for now) when dynamically modifying the prototype chain of an
|
| +// object using __proto__ or Object.setPrototypeOf.
|
| +enum PrototypeOptimizationMode { REGULAR_PROTOTYPE, FAST_PROTOTYPE };
|
|
|
|
|
| // Indicates whether transitions can be added to a source map or not.
|
| @@ -2196,7 +2196,8 @@ class JSObject: public JSReceiver {
|
| Handle<Object> value,
|
| PropertyDetails details);
|
|
|
| - static void OptimizeAsPrototype(Handle<JSObject> object);
|
| + static void OptimizeAsPrototype(Handle<JSObject> object,
|
| + PrototypeOptimizationMode mode);
|
| static void ReoptimizeIfPrototype(Handle<JSObject> object);
|
|
|
| // Retrieve interceptors.
|
| @@ -2475,9 +2476,7 @@ class JSObject: public JSReceiver {
|
|
|
| // Set the object's prototype (only JSReceiver and null are allowed values).
|
| MUST_USE_RESULT static MaybeHandle<Object> SetPrototype(
|
| - Handle<JSObject> object,
|
| - Handle<Object> value,
|
| - bool skip_hidden_prototypes = false);
|
| + Handle<JSObject> object, Handle<Object> value, bool from_javascript);
|
|
|
| // Initializes the body after properties slot, properties slot is
|
| // initialized by set_properties. Fill the pre-allocated fields with
|
| @@ -6125,15 +6124,16 @@ class Map: public HeapObject {
|
| class NumberOfOwnDescriptorsBits: public BitField<int,
|
| kDescriptorIndexBitCount, kDescriptorIndexBitCount> {}; // NOLINT
|
| STATIC_ASSERT(kDescriptorIndexBitCount + kDescriptorIndexBitCount == 20);
|
| - class IsShared: public BitField<bool, 20, 1> {};
|
| - class DictionaryMap: public BitField<bool, 21, 1> {};
|
| - class OwnsDescriptors: public BitField<bool, 22, 1> {};
|
| - class HasInstanceCallHandler: public BitField<bool, 23, 1> {};
|
| - class Deprecated: public BitField<bool, 24, 1> {};
|
| - class IsFrozen: public BitField<bool, 25, 1> {};
|
| - class IsUnstable: public BitField<bool, 26, 1> {};
|
| - class IsMigrationTarget: public BitField<bool, 27, 1> {};
|
| - class DoneInobjectSlackTracking: public BitField<bool, 28, 1> {};
|
| + class DictionaryMap : public BitField<bool, 20, 1> {};
|
| + class OwnsDescriptors : public BitField<bool, 21, 1> {};
|
| + class HasInstanceCallHandler : public BitField<bool, 22, 1> {};
|
| + class Deprecated : public BitField<bool, 23, 1> {};
|
| + class IsFrozen : public BitField<bool, 24, 1> {};
|
| + class IsUnstable : public BitField<bool, 25, 1> {};
|
| + class IsMigrationTarget : public BitField<bool, 26, 1> {};
|
| + class DoneInobjectSlackTracking : public BitField<bool, 27, 1> {};
|
| + // Bit 28 is free.
|
| +
|
| // Keep this bit field at the very end for better code in
|
| // Builtins::kJSConstructStubGeneric stub.
|
| class ConstructionCount: public BitField<int, 29, 3> {};
|
| @@ -6335,12 +6335,6 @@ class Map: public HeapObject {
|
| // function that was used to instantiate the object).
|
| String* constructor_name();
|
|
|
| - // Tells whether the map is shared between objects that may have different
|
| - // behavior. If true, the map should never be modified, instead a clone
|
| - // should be created and modified.
|
| - inline void set_is_shared(bool value);
|
| - inline bool is_shared();
|
| -
|
| // Tells whether the map is used for JSObjects in dictionary mode (ie
|
| // normalized objects, ie objects for which HasFastProperties returns false).
|
| // A map can never be used for both dictionary mode and fast mode JSObjects.
|
| @@ -6460,7 +6454,7 @@ class Map: public HeapObject {
|
| }
|
|
|
| inline bool owns_descriptors();
|
| - inline void set_owns_descriptors(bool is_shared);
|
| + inline void set_owns_descriptors(bool owns_descriptors);
|
| inline bool has_instance_call_handler();
|
| inline void set_has_instance_call_handler();
|
| inline void freeze();
|
| @@ -6649,7 +6643,7 @@ class Map: public HeapObject {
|
| DECLARE_VERIFIER(Map)
|
|
|
| #ifdef VERIFY_HEAP
|
| - void SharedMapVerify();
|
| + void DictionaryMapVerify();
|
| void VerifyOmittedMapChecks();
|
| #endif
|
|
|
| @@ -6795,8 +6789,7 @@ class Map: public HeapObject {
|
| TransitionFlag flag);
|
|
|
| static Handle<Map> CopyNormalized(Handle<Map> map,
|
| - PropertyNormalizationMode mode,
|
| - NormalizedMapSharingMode sharing);
|
| + PropertyNormalizationMode mode);
|
|
|
| // Fires when the layout of an object with a leaf map changes.
|
| // This includes adding transitions to the leaf map or changing
|
| @@ -7780,7 +7773,8 @@ class JSFunction: public JSObject {
|
|
|
| // The initial map for an object created by this constructor.
|
| inline Map* initial_map();
|
| - static void SetInitialMap(Handle<JSFunction> function, Handle<Map> map);
|
| + static void SetInitialMap(Handle<JSFunction> function, Handle<Map> map,
|
| + Handle<Object> prototype);
|
| inline bool has_initial_map();
|
| static void EnsureHasInitialMap(Handle<JSFunction> function);
|
|
|
|
|