Index: src/objects.h |
diff --git a/src/objects.h b/src/objects.h |
index 0e64e37eb1988b92e87404d5c738b6a55ac7fff7..7f35491d92cb1d14671085eda4c4ac85b27bbb85 100644 |
--- a/src/objects.h |
+++ b/src/objects.h |
@@ -1060,6 +1060,25 @@ class Object : public MaybeObject { |
inline double Number(); |
inline bool IsNaN(); |
+ inline Representation OptimalRepresentation() { |
+ if (FLAG_track_fields && IsSmi()) { |
+ return Representation::Smi(); |
+ } else if (FLAG_track_double_fields && IsHeapNumber()) { |
+ return Representation::Double(); |
+ } else { |
+ return Representation::Tagged(); |
+ } |
+ } |
+ |
+ inline bool FitsRepresentation(Representation representation) { |
+ if (FLAG_track_fields && representation.IsSmi()) { |
+ return IsSmi(); |
+ } else if (FLAG_track_double_fields && representation.IsDouble()) { |
+ return IsNumber(); |
+ } |
+ return true; |
+ } |
+ |
// Returns true if the object is of the correct type to be used as a |
// implementation of a JSObject's elements. |
inline bool HasValidElements(); |
@@ -1806,11 +1825,12 @@ class JSObject: public JSReceiver { |
// Extend the receiver with a single fast property appeared first in the |
// passed map. This also extends the property backing store if necessary. |
- static void AddFastPropertyUsingMap(Handle<JSObject> object, Handle<Map> map); |
- inline MUST_USE_RESULT MaybeObject* AddFastPropertyUsingMap(Map* map); |
static void TransitionToMap(Handle<JSObject> object, Handle<Map> map); |
inline MUST_USE_RESULT MaybeObject* TransitionToMap(Map* map); |
+ static void MigrateInstance(Handle<JSObject> instance); |
+ inline MUST_USE_RESULT MaybeObject* MigrateInstance(); |
+ |
// Can cause GC. |
MUST_USE_RESULT MaybeObject* SetLocalPropertyIgnoreAttributes( |
Name* key, |
@@ -2164,6 +2184,11 @@ class JSObject: public JSReceiver { |
Object* new_value, |
PropertyAttributes attributes); |
+ MUST_USE_RESULT MaybeObject* MigrateToMap(Map* new_map); |
+ MUST_USE_RESULT MaybeObject* GeneralizeFieldRepresentation( |
+ int modify_index, |
+ Representation new_representation); |
+ |
// Add a property to a fast-case object. |
MUST_USE_RESULT MaybeObject* AddFastProperty( |
Name* name, |
@@ -2753,6 +2778,9 @@ class DescriptorArray: public FixedArray { |
inline Name* GetSortedKey(int descriptor_number); |
inline int GetSortedKeyIndex(int descriptor_number); |
inline void SetSortedKey(int pointer, int descriptor_number); |
+ inline void InitializeRepresentations(Representation representation); |
+ inline void SetRepresentation(int descriptor_number, |
+ Representation representation); |
// Accessor for complete descriptor. |
inline void Get(int descriptor_number, Descriptor* desc); |
@@ -2773,6 +2801,10 @@ class DescriptorArray: public FixedArray { |
DescriptorArray* src, |
int src_index, |
const WhitenessWitness&); |
+ MUST_USE_RESULT MaybeObject* Merge(int verbatim, |
+ int valid, |
+ int new_size, |
+ DescriptorArray* other); |
MUST_USE_RESULT MaybeObject* CopyUpTo(int enumeration_index); |
@@ -4889,6 +4921,9 @@ class DependentCode: public FixedArray { |
// Group of code that weakly embed this map and depend on being |
// deoptimized when the map is garbage collected. |
kWeaklyEmbeddedGroup, |
+ // Group of code that embed a transition to this map, and depend on being |
+ // deoptimized when the transition is replaced by a new version. |
+ kTransitionGroup, |
// Group of code that omit run-time prototype checks for prototypes |
// described by this map. The group is deoptimized whenever an object |
// described by this map changes shape (and transitions to a new map), |
@@ -4982,6 +5017,7 @@ class Map: public HeapObject { |
class DictionaryMap: public BitField<bool, 24, 1> {}; |
class OwnsDescriptors: public BitField<bool, 25, 1> {}; |
class IsObserved: public BitField<bool, 26, 1> {}; |
+ class Deprecated: public BitField<bool, 27, 1> {}; |
// Tells whether the object in the prototype property will be used |
// for instances created from this function. If the prototype |
@@ -5124,6 +5160,27 @@ class Map: public HeapObject { |
inline void ClearTransitions(Heap* heap, |
WriteBarrierMode mode = UPDATE_WRITE_BARRIER); |
+ void DeprecateTransitionTree(); |
+ void DeprecateTarget(Name* key, DescriptorArray* new_descriptors); |
+ |
+ Map* FindRootMap(); |
+ Map* FindUpdatedMap(int verbatim, int length, DescriptorArray* descriptors); |
+ Map* FindLastMatchMap(int verbatim, int length, DescriptorArray* descriptors); |
+ |
+ int NumberOfFields(); |
+ |
+ bool InstancesNeedRewriting(int target_number_of_fields, |
+ int target_inobject, |
+ int target_unused); |
+ static Handle<Map> GeneralizeRepresentation( |
+ Handle<Map> map, |
+ int modify_index, |
+ Representation new_representation); |
+ MUST_USE_RESULT MaybeObject* GeneralizeRepresentation( |
+ int modify_index, |
+ Representation representation); |
+ MUST_USE_RESULT MaybeObject* CopyGeneralizeAllRepresentations(); |
+ |
// Tells whether the map is attached to SharedFunctionInfo |
// (for inobject slack tracking). |
inline void set_attached_to_shared_function_info(bool value); |
@@ -5262,6 +5319,9 @@ class Map: public HeapObject { |
inline void set_owns_descriptors(bool is_shared); |
inline bool is_observed(); |
inline void set_is_observed(bool is_observed); |
+ inline void deprecate(); |
+ inline bool is_deprecated(); |
+ inline bool CanBeDeprecated(); |
MUST_USE_RESULT MaybeObject* RawCopy(int instance_size); |
MUST_USE_RESULT MaybeObject* CopyWithPreallocatedFieldDescriptors(); |
@@ -5271,6 +5331,9 @@ class Map: public HeapObject { |
Name* name, |
TransitionFlag flag, |
int descriptor_index); |
+ MUST_USE_RESULT MaybeObject* CopyInstallDescriptors( |
+ int new_descriptor, |
+ DescriptorArray* descriptors); |
MUST_USE_RESULT MaybeObject* ShareDescriptor(DescriptorArray* descriptors, |
Descriptor* descriptor); |
MUST_USE_RESULT MaybeObject* CopyAddDescriptor(Descriptor* descriptor, |
@@ -5296,9 +5359,6 @@ class Map: public HeapObject { |
// instance descriptors. |
MUST_USE_RESULT MaybeObject* Copy(); |
- // Returns the property index for name (only valid for FAST MODE). |
- int PropertyIndexFor(Name* name); |
- |
// Returns the next free property index (only valid for FAST MODE). |
int NextFreePropertyIndex(); |
@@ -5349,6 +5409,8 @@ class Map: public HeapObject { |
// Computes a hash value for this map, to be used in HashTables and such. |
int Hash(); |
+ bool EquivalentToForTransition(Map* other); |
+ |
// Compares this map to another to see if they describe equivalent objects. |
// If |mode| is set to CLEAR_INOBJECT_PROPERTIES, |other| is treated as if |
// it had exactly zero inobject properties. |