Index: src/ast/ast.h |
diff --git a/src/ast/ast.h b/src/ast/ast.h |
index 203dbd34197893872887622dfd098b112b4da77e..e739e84ca509b812d7476897090575c0ce405d57 100644 |
--- a/src/ast/ast.h |
+++ b/src/ast/ast.h |
@@ -392,6 +392,9 @@ class Expression : public AstNode { |
int base_id_; |
Bounds bounds_; |
class ToBooleanTypesField : public BitField16<uint16_t, 0, 9> {}; |
+ |
+ protected: |
+ static const int kExpressionBitFieldNext = ToBooleanTypesField::kNext; |
uint16_t bit_field_; |
// Ends with 16-bit field; deriving classes in turn begin with |
// 16-bit fields for optimum packing efficiency. |
@@ -1425,7 +1428,7 @@ class ObjectLiteralProperty final : public ZoneObject { |
void set_emit_store(bool emit_store); |
bool emit_store(); |
- bool is_static() const { return is_static_; } |
+ bool is_static() const { return IsStaticMethod(method_kind_); } |
bool is_computed_name() const { return is_computed_name_; } |
FeedbackVectorSlot GetSlot(int offset = 0) const { |
@@ -1445,9 +1448,9 @@ class ObjectLiteralProperty final : public ZoneObject { |
friend class AstNodeFactory; |
ObjectLiteralProperty(Expression* key, Expression* value, Kind kind, |
- bool is_static, bool is_computed_name); |
+ MethodKind method_kind, bool is_computed_name); |
ObjectLiteralProperty(AstValueFactory* ast_value_factory, Expression* key, |
- Expression* value, bool is_static, |
+ Expression* value, MethodKind method_kind, |
bool is_computed_name); |
private: |
@@ -1455,8 +1458,8 @@ class ObjectLiteralProperty final : public ZoneObject { |
Expression* value_; |
FeedbackVectorSlot slots_[2]; |
Kind kind_; |
+ MethodKind method_kind_; |
bool emit_store_; |
- bool is_static_; |
bool is_computed_name_; |
Handle<Map> receiver_type_; |
}; |
@@ -2599,7 +2602,9 @@ class FunctionLiteral final : public Expression { |
int start_position() const; |
int end_position() const; |
int SourceSize() const { return end_position() - start_position(); } |
- bool is_declaration() const { return IsDeclaration::decode(bitfield_); } |
+ bool is_declaration() const { |
+ return IsDeclaration::decode(Expression::bit_field_); |
+ } |
bool is_named_expression() const { |
return IsNamedExpression::decode(bitfield_); |
} |
@@ -2726,7 +2731,6 @@ class FunctionLiteral final : public Expression { |
function_token_position_(RelocInfo::kNoPosition), |
yield_count_(0) { |
bitfield_ = |
- IsDeclaration::encode(function_type == kDeclaration) | |
IsNamedExpression::encode(function_type == kNamedExpression) | |
IsAnonymousExpression::encode(function_type == kAnonymousExpression) | |
Pretenure::encode(false) | |
@@ -2739,15 +2743,17 @@ class FunctionLiteral final : public Expression { |
} |
private: |
- class IsDeclaration : public BitField16<bool, 0, 1> {}; |
- class IsNamedExpression : public BitField16<bool, 1, 1> {}; |
- class IsAnonymousExpression : public BitField16<bool, 2, 1> {}; |
- class Pretenure : public BitField16<bool, 3, 1> {}; |
- class HasDuplicateParameters : public BitField16<bool, 4, 1> {}; |
- class IsFunction : public BitField16<bool, 5, 1> {}; |
- class ShouldEagerCompile : public BitField16<bool, 6, 1> {}; |
- class ShouldBeUsedOnceHint : public BitField16<bool, 7, 1> {}; |
- class FunctionKindBits : public BitField16<FunctionKind, 8, 8> {}; |
+ STATIC_ASSERT((Expression::kExpressionBitFieldNext + 1) < 16); |
+ class IsDeclaration |
+ : public BitField16<bool, Expression::kExpressionBitFieldNext, 1> {}; |
+ class IsNamedExpression : public BitField16<bool, 0, 1> {}; |
+ class IsAnonymousExpression : public BitField16<bool, 1, 1> {}; |
+ class Pretenure : public BitField16<bool, 2, 1> {}; |
+ class HasDuplicateParameters : public BitField16<bool, 3, 1> {}; |
+ class IsFunction : public BitField16<bool, 4, 1> {}; |
+ class ShouldEagerCompile : public BitField16<bool, 5, 1> {}; |
+ class ShouldBeUsedOnceHint : public BitField16<bool, 6, 1> {}; |
+ class FunctionKindBits : public BitField16<FunctionKind, 7, 9> {}; |
// Start with 16-bit field, which should get packed together |
// with Expression's trailing 16-bit field. |
@@ -3259,17 +3265,17 @@ class AstNodeFactory final BASE_EMBEDDED { |
ObjectLiteral::Property* NewObjectLiteralProperty( |
Expression* key, Expression* value, ObjectLiteralProperty::Kind kind, |
- bool is_static, bool is_computed_name) { |
- return new (local_zone_) |
- ObjectLiteral::Property(key, value, kind, is_static, is_computed_name); |
+ MethodKind method_kind, bool is_computed_name) { |
+ return new (local_zone_) ObjectLiteral::Property( |
+ key, value, kind, method_kind, is_computed_name); |
} |
ObjectLiteral::Property* NewObjectLiteralProperty(Expression* key, |
Expression* value, |
- bool is_static, |
+ MethodKind method_kind, |
bool is_computed_name) { |
return new (local_zone_) ObjectLiteral::Property( |
- ast_value_factory_, key, value, is_static, is_computed_name); |
+ ast_value_factory_, key, value, method_kind, is_computed_name); |
} |
RegExpLiteral* NewRegExpLiteral(const AstRawString* pattern, int flags, |