Index: src/ast.h |
diff --git a/src/ast.h b/src/ast.h |
index a3fb9626b823185336966aa4d220d22d79508459..3b36b8ab338b3b1f5c98c50fd196cdd0f50dd8e5 100644 |
--- a/src/ast.h |
+++ b/src/ast.h |
@@ -391,22 +391,22 @@ class Expression : public AstNode { |
protected: |
Expression(Zone* zone, int pos, int num_ids_needed_by_subclass, IdGen* id_gen) |
: AstNode(pos), |
- is_parenthesized_(false), |
- is_multi_parenthesized_(false), |
- bounds_(Bounds::Unbounded(zone)), |
base_id_( |
- id_gen->ReserveIdRange(num_ids_needed_by_subclass + num_ids())) {} |
+ id_gen->ReserveIdRange(num_ids_needed_by_subclass + num_ids())), |
+ bounds_(Bounds::Unbounded(zone)), |
+ is_parenthesized_(false), |
+ is_multi_parenthesized_(false) {} |
void set_to_boolean_types(byte types) { to_boolean_types_ = types; } |
static int num_ids() { return 2; } |
int base_id() const { return base_id_; } |
private: |
+ const int base_id_; |
+ Bounds bounds_; |
byte to_boolean_types_; |
bool is_parenthesized_ : 1; |
bool is_multi_parenthesized_ : 1; |
- Bounds bounds_; |
- const int base_id_; |
}; |
@@ -511,21 +511,15 @@ class Declaration : public AstNode { |
virtual bool IsInlineable() const; |
protected: |
- Declaration(Zone* zone, |
- VariableProxy* proxy, |
- VariableMode mode, |
- Scope* scope, |
+ Declaration(Zone* zone, VariableProxy* proxy, VariableMode mode, Scope* scope, |
int pos) |
- : AstNode(pos), |
- proxy_(proxy), |
- mode_(mode), |
- scope_(scope) { |
+ : AstNode(pos), mode_(mode), proxy_(proxy), scope_(scope) { |
DCHECK(IsDeclaredVariableMode(mode)); |
} |
private: |
- VariableProxy* proxy_; |
VariableMode mode_; |
+ VariableProxy* proxy_; |
// Nested scope from which the declaration originated. |
Scope* scope_; |
@@ -1711,15 +1705,15 @@ class VariableProxy FINAL : public Expression { |
VariableProxy(Zone* zone, const AstRawString* name, bool is_this, |
Interface* interface, int position, IdGen* id_gen); |
+ bool is_this_ : 1; |
+ bool is_assigned_ : 1; |
+ bool is_resolved_ : 1; |
+ FeedbackVectorSlot variable_feedback_slot_; |
union { |
const AstRawString* raw_name_; // if !is_resolved_ |
Variable* var_; // if is_resolved_ |
}; |
Interface* interface_; |
- FeedbackVectorSlot variable_feedback_slot_; |
- bool is_this_ : 1; |
- bool is_assigned_ : 1; |
- bool is_resolved_ : 1; |
}; |
@@ -1773,25 +1767,24 @@ class Property FINAL : public Expression { |
protected: |
Property(Zone* zone, Expression* obj, Expression* key, int pos, IdGen* id_gen) |
: Expression(zone, pos, num_ids(), id_gen), |
- obj_(obj), |
- key_(key), |
- property_feedback_slot_(FeedbackVectorSlot::Invalid()), |
is_for_call_(false), |
is_uninitialized_(false), |
- is_string_access_(false) {} |
+ is_string_access_(false), |
+ property_feedback_slot_(FeedbackVectorSlot::Invalid()), |
+ obj_(obj), |
+ key_(key) {} |
static int num_ids() { return 2; } |
int base_id() const { return Expression::base_id() + Expression::num_ids(); } |
private: |
- Expression* obj_; |
- Expression* key_; |
- FeedbackVectorSlot property_feedback_slot_; |
- |
- SmallMapList receiver_types_; |
bool is_for_call_ : 1; |
bool is_uninitialized_ : 1; |
bool is_string_access_ : 1; |
+ FeedbackVectorSlot property_feedback_slot_; |
+ Expression* obj_; |
+ Expression* key_; |
+ SmallMapList receiver_types_; |
}; |
@@ -1870,9 +1863,9 @@ class Call FINAL : public Expression { |
Call(Zone* zone, Expression* expression, ZoneList<Expression*>* arguments, |
int pos, IdGen* id_gen) |
: Expression(zone, pos, num_ids(), id_gen), |
+ call_feedback_slot_(FeedbackVectorSlot::Invalid()), |
expression_(expression), |
- arguments_(arguments), |
- call_feedback_slot_(FeedbackVectorSlot::Invalid()) { |
+ arguments_(arguments) { |
if (expression->IsProperty()) { |
expression->AsProperty()->mark_for_call(); |
} |
@@ -1882,12 +1875,12 @@ class Call FINAL : public Expression { |
int base_id() const { return Expression::base_id() + Expression::num_ids(); } |
private: |
+ FeedbackVectorSlot call_feedback_slot_; |
Expression* expression_; |
ZoneList<Expression*>* arguments_; |
Handle<JSFunction> target_; |
Handle<Cell> cell_; |
Handle<AllocationSite> allocation_site_; |
- FeedbackVectorSlot call_feedback_slot_; |
}; |
@@ -2035,7 +2028,7 @@ class BinaryOperation FINAL : public Expression { |
virtual bool ResultOverwriteAllowed() const OVERRIDE; |
- Token::Value op() const { return op_; } |
+ Token::Value op() const { return static_cast<Token::Value>(op_); } |
Expression* left() const { return left_; } |
Expression* right() const { return right_; } |
Handle<AllocationSite> allocation_site() const { return allocation_site_; } |
@@ -2050,8 +2043,14 @@ class BinaryOperation FINAL : public Expression { |
TypeFeedbackId BinaryOperationFeedbackId() const { |
return TypeFeedbackId(base_id() + 1); |
} |
- Maybe<int> fixed_right_arg() const { return fixed_right_arg_; } |
- void set_fixed_right_arg(Maybe<int> arg) { fixed_right_arg_ = arg; } |
+ Maybe<int> fixed_right_arg() const { |
+ return has_fixed_right_arg_ ? Maybe<int>(fixed_right_arg_value_) |
+ : Maybe<int>(); |
+ } |
+ void set_fixed_right_arg(Maybe<int> arg) { |
+ has_fixed_right_arg_ = arg.has_value; |
+ if (arg.has_value) fixed_right_arg_value_ = arg.value; |
+ } |
virtual void RecordToBooleanTypeFeedback( |
TypeFeedbackOracle* oracle) OVERRIDE; |
@@ -2060,7 +2059,7 @@ class BinaryOperation FINAL : public Expression { |
BinaryOperation(Zone* zone, Token::Value op, Expression* left, |
Expression* right, int pos, IdGen* id_gen) |
: Expression(zone, pos, num_ids(), id_gen), |
- op_(op), |
+ op_(static_cast<byte>(op)), |
left_(left), |
right_(right) { |
DCHECK(Token::IsBinaryOp(op)); |
@@ -2070,14 +2069,14 @@ class BinaryOperation FINAL : public Expression { |
int base_id() const { return Expression::base_id() + Expression::num_ids(); } |
private: |
- Token::Value op_; |
+ const byte op_; // actually Token::Value |
+ // TODO(rossberg): the fixed arg should probably be represented as a Constant |
+ // type for the RHS. Currenty it's actually a Maybe<int> |
+ bool has_fixed_right_arg_; |
+ int fixed_right_arg_value_; |
Expression* left_; |
Expression* right_; |
Handle<AllocationSite> allocation_site_; |
- |
- // TODO(rossberg): the fixed arg should probably be represented as a Constant |
- // type for the RHS. |
- Maybe<int> fixed_right_arg_; |
}; |
@@ -2271,14 +2270,14 @@ class Assignment FINAL : public Expression { |
} |
private: |
- Token::Value op_; |
- Expression* target_; |
- Expression* value_; |
- BinaryOperation* binary_operation_; |
bool is_uninitialized_ : 1; |
IcCheckType key_type_ : 1; |
KeyedAccessStoreMode store_mode_ : 5; // Windows treats as signed, |
// must have extra bit. |
+ Token::Value op_; |
+ Expression* target_; |
+ Expression* value_; |
+ BinaryOperation* binary_operation_; |
SmallMapList receiver_types_; |
}; |