Index: src/ast.h |
diff --git a/src/ast.h b/src/ast.h |
index cc27c202f6abdedab3afd20e66ce2fd94c177c6d..11d29f438f14a02276cb2e52b06562f646eae83e 100644 |
--- a/src/ast.h |
+++ b/src/ast.h |
@@ -221,6 +221,11 @@ class Expression: public AstNode { |
Expression() : bitfields_(0) {} |
+ virtual int position() const { |
+ UNREACHABLE(); |
+ return 0; |
+ } |
+ |
virtual Expression* AsExpression() { return this; } |
virtual bool IsTrivial() { return false; } |
@@ -317,6 +322,14 @@ class Expression: public AstNode { |
bitfields_ |= NumBitOpsField::encode(num_bit_ops); |
} |
+ ExternalArrayType external_array_type() const { |
+ return ExternalArrayTypeField::decode(bitfields_); |
+ } |
+ void set_external_array_type(ExternalArrayType array_type) { |
+ bitfields_ &= ~ExternalArrayTypeField::mask(); |
+ bitfields_ |= ExternalArrayTypeField::encode(array_type); |
+ } |
+ |
private: |
static const int kMaxNumBitOps = (1 << 5) - 1; |
@@ -329,6 +342,7 @@ class Expression: public AstNode { |
class ToInt32Field : public BitField<bool, 2, 1> {}; |
class NumBitOpsField : public BitField<int, 3, 5> {}; |
class LoopConditionField: public BitField<bool, 8, 1> {}; |
+ class ExternalArrayTypeField: public BitField<ExternalArrayType, 9, 4> {}; |
}; |
@@ -695,7 +709,7 @@ class CaseClause: public ZoneObject { |
JumpTarget* body_target() { return &body_target_; } |
ZoneList<Statement*>* statements() const { return statements_; } |
- int position() { return position_; } |
+ int position() const { return position_; } |
void set_position(int pos) { position_ = pos; } |
int EntryId() { return entry_id_; } |
@@ -1245,7 +1259,7 @@ class Property: public Expression { |
Expression* obj() const { return obj_; } |
Expression* key() const { return key_; } |
- int position() const { return pos_; } |
+ virtual int position() const { return pos_; } |
bool is_synthetic() const { return type_ == SYNTHETIC; } |
bool IsStringLength() const { return is_string_length_; } |
@@ -1259,11 +1273,6 @@ class Property: public Expression { |
} |
bool is_arguments_access() const { return is_arguments_access_; } |
- ExternalArrayType GetExternalArrayType() const { return array_type_; } |
- void SetExternalArrayType(ExternalArrayType array_type) { |
- array_type_ = array_type; |
- } |
- |
// Type feedback information. |
void RecordTypeFeedback(TypeFeedbackOracle* oracle); |
virtual bool IsMonomorphic() { return is_monomorphic_; } |
@@ -1287,7 +1296,6 @@ class Property: public Expression { |
bool is_function_prototype_ : 1; |
bool is_arguments_access_ : 1; |
Handle<Map> monomorphic_receiver_type_; |
- ExternalArrayType array_type_; |
}; |
@@ -1309,7 +1317,7 @@ class Call: public Expression { |
Expression* expression() const { return expression_; } |
ZoneList<Expression*>* arguments() const { return arguments_; } |
- int position() { return pos_; } |
+ virtual int position() const { return pos_; } |
void RecordTypeFeedback(TypeFeedbackOracle* oracle); |
virtual ZoneMapList* GetReceiverTypes() { return receiver_types_; } |
@@ -1387,7 +1395,7 @@ class CallNew: public Expression { |
Expression* expression() const { return expression_; } |
ZoneList<Expression*>* arguments() const { return arguments_; } |
- int position() { return pos_; } |
+ virtual int position() const { return pos_; } |
private: |
Expression* expression_; |
@@ -1470,7 +1478,7 @@ class BinaryOperation: public Expression { |
Token::Value op() const { return op_; } |
Expression* left() const { return left_; } |
Expression* right() const { return right_; } |
- int position() const { return pos_; } |
+ virtual int position() const { return pos_; } |
// Bailout support. |
int RightId() const { return right_id_; } |
@@ -1507,12 +1515,18 @@ class CountOperation: public Expression { |
} |
Expression* expression() const { return expression_; } |
- int position() const { return pos_; } |
+ virtual int position() const { return pos_; } |
virtual void MarkAsStatement() { is_prefix_ = true; } |
virtual bool IsInlineable() const; |
+ void RecordTypeFeedback(TypeFeedbackOracle* oracle); |
+ virtual bool IsMonomorphic() { return is_monomorphic_; } |
+ virtual Handle<Map> GetMonomorphicReceiverType() { |
+ return monomorphic_receiver_type_; |
+ } |
+ |
// Bailout support. |
int AssignmentId() const { return assignment_id_; } |
int CountId() const { return count_id_; } |
@@ -1520,10 +1534,12 @@ class CountOperation: public Expression { |
private: |
Token::Value op_; |
bool is_prefix_; |
+ bool is_monomorphic_; |
Expression* expression_; |
int pos_; |
int assignment_id_; |
int count_id_; |
+ Handle<Map> monomorphic_receiver_type_; |
}; |
@@ -1542,7 +1558,7 @@ class CompareOperation: public Expression { |
Token::Value op() const { return op_; } |
Expression* left() const { return left_; } |
Expression* right() const { return right_; } |
- int position() const { return pos_; } |
+ virtual int position() const { return pos_; } |
virtual bool IsInlineable() const; |
@@ -1637,7 +1653,7 @@ class Assignment: public Expression { |
Token::Value op() const { return op_; } |
Expression* target() const { return target_; } |
Expression* value() const { return value_; } |
- int position() { return pos_; } |
+ virtual int position() const { return pos_; } |
BinaryOperation* binary_operation() const { return binary_operation_; } |
// This check relies on the definition order of token in token.h. |
@@ -1659,10 +1675,6 @@ class Assignment: public Expression { |
virtual Handle<Map> GetMonomorphicReceiverType() { |
return monomorphic_receiver_type_; |
} |
- ExternalArrayType GetExternalArrayType() const { return array_type_; } |
- void SetExternalArrayType(ExternalArrayType array_type) { |
- array_type_ = array_type; |
- } |
// Bailout support. |
int CompoundLoadId() const { return compound_load_id_; } |
@@ -1683,7 +1695,6 @@ class Assignment: public Expression { |
bool is_monomorphic_; |
ZoneMapList* receiver_types_; |
Handle<Map> monomorphic_receiver_type_; |
- ExternalArrayType array_type_; |
}; |
@@ -1695,7 +1706,7 @@ class Throw: public Expression { |
DECLARE_NODE_TYPE(Throw) |
Expression* exception() const { return exception_; } |
- int position() const { return pos_; } |
+ virtual int position() const { return pos_; } |
private: |
Expression* exception_; |