| Index: src/objects.h
|
| diff --git a/src/objects.h b/src/objects.h
|
| index 1d02ed7c2c495ec1f064a8403be584083c0d83ae..b7bf504f3d7b48b4418c3966f8f4c02f1f130661 100644
|
| --- a/src/objects.h
|
| +++ b/src/objects.h
|
| @@ -4680,6 +4680,10 @@ class Code: public HeapObject {
|
| // Get the safepoint entry for the given pc.
|
| SafepointEntry GetSafepointEntry(Address pc);
|
|
|
| + // Find an object in a stub with a specified map
|
| + Object* FindNthObject(int n, Map* match_map);
|
| + void ReplaceNthObject(int n, Map* match_map, Object* replace_with);
|
| +
|
| // Find the first map in an IC stub.
|
| Map* FindFirstMap();
|
| void FindAllMaps(MapHandleList* maps);
|
| @@ -4692,6 +4696,8 @@ class Code: public HeapObject {
|
| // Find the first name in an IC stub.
|
| Name* FindFirstName();
|
|
|
| + void ReplaceNthCell(int n, Cell* replace_with);
|
| +
|
| class ExtraICStateStrictMode: public BitField<StrictModeFlag, 0, 1> {};
|
| class ExtraICStateKeyedAccessStoreMode:
|
| public BitField<KeyedAccessStoreMode, 1, 4> {}; // NOLINT
|
| @@ -5019,7 +5025,10 @@ class DependentCode: public FixedArray {
|
| // Group of code that depends on elements not being added to objects with
|
| // this map.
|
| kElementsCantBeAddedGroup,
|
| - kGroupCount = kElementsCantBeAddedGroup + 1
|
| + // Group of code that depends on global property values in property cells
|
| + // not being changed.
|
| + kPropertyCellChangedGroup,
|
| + kGroupCount = kPropertyCellChangedGroup + 1
|
| };
|
|
|
| // Array for holding the index of the first code object of each group.
|
| @@ -5061,6 +5070,9 @@ class DependentCode: public FixedArray {
|
| inline void copy(int from, int to);
|
| static inline DependentCode* cast(Object* object);
|
|
|
| + static DependentCode* ForObject(Handle<HeapObject> object,
|
| + DependencyGroup group);
|
| +
|
| private:
|
| // Make a room at the end of the given group by moving out the first
|
| // code objects of the subsequent groups.
|
| @@ -5565,7 +5577,7 @@ class Map: public HeapObject {
|
| inline bool CanOmitPrototypeChecks();
|
|
|
| void AddDependentCompilationInfo(DependentCode::DependencyGroup group,
|
| - CompilationInfo* info);
|
| + CompilationInfo* info);
|
|
|
| void AddDependentCode(DependentCode::DependencyGroup group,
|
| Handle<Code> code);
|
| @@ -8580,9 +8592,21 @@ class Cell: public HeapObject {
|
|
|
| class PropertyCell: public Cell {
|
| public:
|
| + // [type]: type of the global property.
|
| Type* type();
|
| void set_type(Type* value, WriteBarrierMode mode = UPDATE_WRITE_BARRIER);
|
|
|
| + // [dependent_code]: dependent code that depends on the type of the global
|
| + // property.
|
| + DECL_ACCESSORS(dependent_code, DependentCode)
|
| +
|
| + // Sets the value of the cell and updates the type field to be the union
|
| + // of the cell's current type and the value's type.
|
| + void set_value_infer_type(Object* value,
|
| + WriteBarrierMode mode = UPDATE_WRITE_BARRIER);
|
| +
|
| + Type* union_type(Object* value);
|
| +
|
| // Casting.
|
| static inline PropertyCell* cast(Object* obj);
|
|
|
| @@ -8596,13 +8620,18 @@ class PropertyCell: public Cell {
|
|
|
| // Layout description.
|
| static const int kTypeOffset = kValueOffset + kPointerSize;
|
| - static const int kSize = kTypeOffset + kPointerSize;
|
| + static const int kDependentCodeOffset = kTypeOffset + kPointerSize;
|
| + static const int kSize = kDependentCodeOffset + kPointerSize;
|
|
|
| typedef FixedBodyDescriptor<
|
| kValueOffset,
|
| - kTypeOffset + kPointerSize,
|
| + PropertyCell::kSize,
|
| PropertyCell::kSize> BodyDescriptor;
|
|
|
| + void AddDependentCompilationInfo(CompilationInfo* info);
|
| +
|
| + void AddDependentCode(Handle<Code> code);
|
| +
|
| private:
|
| DECL_ACCESSORS(type_raw, Object)
|
| DISALLOW_IMPLICIT_CONSTRUCTORS(PropertyCell);
|
|
|