Index: src/ast/ast.h |
diff --git a/src/ast/ast.h b/src/ast/ast.h |
index 796037d7da451decdfe29efea954c3eb1ef85d69..e5c7646ef3a342794ad5db1ded50b13ecd425e73 100644 |
--- a/src/ast/ast.h |
+++ b/src/ast/ast.h |
@@ -1240,32 +1240,32 @@ class Literal final : public Expression { |
const AstValue* value_; |
}; |
- |
-class AstLiteralReindexer; |
- |
-// Base class for literals that needs space in the corresponding JSFunction. |
+// Base class for literals that need space in the type feedback vector. |
class MaterializedLiteral : public Expression { |
public: |
- int literal_index() { return literal_index_; } |
- |
int depth() const { |
// only callable after initialization. |
DCHECK(depth_ >= 1); |
return depth_; |
} |
+ void AssignFeedbackVectorSlots(FeedbackVectorSpec* spec, |
+ FeedbackVectorSlotCache* cache) { |
+ literal_slot_ = spec->AddLiteralSlot(); |
+ } |
+ |
+ FeedbackVectorSlot literal_slot() const { return literal_slot_; } |
+ |
private: |
int depth_ : 31; |
- int literal_index_; |
- |
- friend class AstLiteralReindexer; |
+ FeedbackVectorSlot literal_slot_; |
class IsSimpleField |
: public BitField<bool, Expression::kNextBitFieldIndex, 1> {}; |
protected: |
- MaterializedLiteral(int literal_index, int pos, NodeType type) |
- : Expression(pos, type), depth_(0), literal_index_(literal_index) { |
+ MaterializedLiteral(int pos, NodeType type) |
+ : Expression(pos, type), depth_(0) { |
bit_field_ |= IsSimpleField::encode(false); |
} |
@@ -1472,10 +1472,10 @@ class ObjectLiteral final : public MaterializedLiteral { |
private: |
friend class AstNodeFactory; |
- ObjectLiteral(ZoneList<Property*>* properties, int literal_index, |
+ ObjectLiteral(ZoneList<Property*>* properties, |
uint32_t boilerplate_properties, int pos, |
bool has_rest_property) |
- : MaterializedLiteral(literal_index, pos, kObjectLiteral), |
+ : MaterializedLiteral(pos, kObjectLiteral), |
boilerplate_properties_(boilerplate_properties), |
properties_(properties) { |
bit_field_ |= FastElementsField::encode(false) | |
@@ -1534,9 +1534,8 @@ class RegExpLiteral final : public MaterializedLiteral { |
private: |
friend class AstNodeFactory; |
- RegExpLiteral(const AstRawString* pattern, int flags, int literal_index, |
- int pos) |
- : MaterializedLiteral(literal_index, pos, kRegExpLiteral), |
+ RegExpLiteral(const AstRawString* pattern, int flags, int pos) |
+ : MaterializedLiteral(pos, kRegExpLiteral), |
flags_(flags), |
pattern_(pattern) { |
set_depth(1); |
@@ -1619,9 +1618,8 @@ class ArrayLiteral final : public MaterializedLiteral { |
private: |
friend class AstNodeFactory; |
- ArrayLiteral(ZoneList<Expression*>* values, int first_spread_index, |
- int literal_index, int pos) |
- : MaterializedLiteral(literal_index, pos, kArrayLiteral), |
+ ArrayLiteral(ZoneList<Expression*>* values, int first_spread_index, int pos) |
+ : MaterializedLiteral(pos, kArrayLiteral), |
first_spread_index_(first_spread_index), |
values_(values) {} |
@@ -3333,11 +3331,10 @@ class AstNodeFactory final BASE_EMBEDDED { |
} |
ObjectLiteral* NewObjectLiteral( |
- ZoneList<ObjectLiteral::Property*>* properties, int literal_index, |
+ ZoneList<ObjectLiteral::Property*>* properties, |
uint32_t boilerplate_properties, int pos, bool has_rest_property) { |
- return new (zone_) |
- ObjectLiteral(properties, literal_index, boilerplate_properties, pos, |
- has_rest_property); |
+ return new (zone_) ObjectLiteral(properties, boilerplate_properties, pos, |
+ has_rest_property); |
} |
ObjectLiteral::Property* NewObjectLiteralProperty( |
@@ -3355,21 +3352,18 @@ class AstNodeFactory final BASE_EMBEDDED { |
} |
RegExpLiteral* NewRegExpLiteral(const AstRawString* pattern, int flags, |
- int literal_index, int pos) { |
- return new (zone_) RegExpLiteral(pattern, flags, literal_index, pos); |
+ int pos) { |
+ return new (zone_) RegExpLiteral(pattern, flags, pos); |
} |
ArrayLiteral* NewArrayLiteral(ZoneList<Expression*>* values, |
- int literal_index, |
int pos) { |
- return new (zone_) ArrayLiteral(values, -1, literal_index, pos); |
+ return new (zone_) ArrayLiteral(values, -1, pos); |
} |
ArrayLiteral* NewArrayLiteral(ZoneList<Expression*>* values, |
- int first_spread_index, int literal_index, |
- int pos) { |
- return new (zone_) |
- ArrayLiteral(values, first_spread_index, literal_index, pos); |
+ int first_spread_index, int pos) { |
+ return new (zone_) ArrayLiteral(values, first_spread_index, pos); |
} |
VariableProxy* NewVariableProxy(Variable* var, |