OLD | NEW |
1 // Copyright 2012 the V8 project authors. All rights reserved. | 1 // Copyright 2012 the V8 project authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #ifndef V8_AST_H_ | 5 #ifndef V8_AST_H_ |
6 #define V8_AST_H_ | 6 #define V8_AST_H_ |
7 | 7 |
8 #include "src/assembler.h" | 8 #include "src/assembler.h" |
9 #include "src/ast-value-factory.h" | 9 #include "src/ast-value-factory.h" |
10 #include "src/bailout-reason.h" | 10 #include "src/bailout-reason.h" |
(...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
82 V(CallRuntime) \ | 82 V(CallRuntime) \ |
83 V(UnaryOperation) \ | 83 V(UnaryOperation) \ |
84 V(CountOperation) \ | 84 V(CountOperation) \ |
85 V(BinaryOperation) \ | 85 V(BinaryOperation) \ |
86 V(CompareOperation) \ | 86 V(CompareOperation) \ |
87 V(Spread) \ | 87 V(Spread) \ |
88 V(ThisFunction) \ | 88 V(ThisFunction) \ |
89 V(SuperPropertyReference) \ | 89 V(SuperPropertyReference) \ |
90 V(SuperCallReference) \ | 90 V(SuperCallReference) \ |
91 V(CaseClause) \ | 91 V(CaseClause) \ |
92 V(EmptyParentheses) | 92 V(EmptyParentheses) \ |
| 93 V(RestParameter) |
93 | 94 |
94 #define AST_NODE_LIST(V) \ | 95 #define AST_NODE_LIST(V) \ |
95 DECLARATION_NODE_LIST(V) \ | 96 DECLARATION_NODE_LIST(V) \ |
96 STATEMENT_NODE_LIST(V) \ | 97 STATEMENT_NODE_LIST(V) \ |
97 EXPRESSION_NODE_LIST(V) | 98 EXPRESSION_NODE_LIST(V) |
98 | 99 |
99 // Forward declarations | 100 // Forward declarations |
100 class AstNodeFactory; | 101 class AstNodeFactory; |
101 class AstVisitor; | 102 class AstVisitor; |
102 class Declaration; | 103 class Declaration; |
(...skipping 1620 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1723 const AstRawString* raw_name_; // if !is_resolved_ | 1724 const AstRawString* raw_name_; // if !is_resolved_ |
1724 Variable* var_; // if is_resolved_ | 1725 Variable* var_; // if is_resolved_ |
1725 }; | 1726 }; |
1726 // Position is stored in the AstNode superclass, but VariableProxy needs to | 1727 // Position is stored in the AstNode superclass, but VariableProxy needs to |
1727 // know its end position too (for error messages). It cannot be inferred from | 1728 // know its end position too (for error messages). It cannot be inferred from |
1728 // the variable name length because it can contain escapes. | 1729 // the variable name length because it can contain escapes. |
1729 int end_position_; | 1730 int end_position_; |
1730 }; | 1731 }; |
1731 | 1732 |
1732 | 1733 |
| 1734 class RestParameter final : public Expression { |
| 1735 public: |
| 1736 DECLARE_NODE_TYPE(RestParameter) |
| 1737 |
| 1738 VariableProxy* parameter() const { return parameter_; } |
| 1739 int literal_index() const { return literal_index_; } |
| 1740 |
| 1741 int end_position() const { return parameter_->end_position(); } |
| 1742 |
| 1743 protected: |
| 1744 RestParameter(Zone* zone, VariableProxy* parameter, int literal_index, |
| 1745 int position) |
| 1746 : Expression(zone, position), |
| 1747 parameter_(parameter), |
| 1748 literal_index_(literal_index) {} |
| 1749 |
| 1750 VariableProxy* parameter_; |
| 1751 int literal_index_; |
| 1752 |
| 1753 friend class AstLiteralReindexer; |
| 1754 }; |
| 1755 |
| 1756 |
1733 // Left-hand side can only be a property, a global or a (parameter or local) | 1757 // Left-hand side can only be a property, a global or a (parameter or local) |
1734 // slot. | 1758 // slot. |
1735 enum LhsKind { | 1759 enum LhsKind { |
1736 VARIABLE, | 1760 VARIABLE, |
1737 NAMED_PROPERTY, | 1761 NAMED_PROPERTY, |
1738 KEYED_PROPERTY, | 1762 KEYED_PROPERTY, |
1739 NAMED_SUPER_PROPERTY, | 1763 NAMED_SUPER_PROPERTY, |
1740 KEYED_SUPER_PROPERTY | 1764 KEYED_SUPER_PROPERTY |
1741 }; | 1765 }; |
1742 | 1766 |
(...skipping 1749 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3492 | 3516 |
3493 VariableProxy* NewVariableProxy(const AstRawString* name, | 3517 VariableProxy* NewVariableProxy(const AstRawString* name, |
3494 Variable::Kind variable_kind, | 3518 Variable::Kind variable_kind, |
3495 int start_position = RelocInfo::kNoPosition, | 3519 int start_position = RelocInfo::kNoPosition, |
3496 int end_position = RelocInfo::kNoPosition) { | 3520 int end_position = RelocInfo::kNoPosition) { |
3497 DCHECK_NOT_NULL(name); | 3521 DCHECK_NOT_NULL(name); |
3498 return new (zone_) | 3522 return new (zone_) |
3499 VariableProxy(zone_, name, variable_kind, start_position, end_position); | 3523 VariableProxy(zone_, name, variable_kind, start_position, end_position); |
3500 } | 3524 } |
3501 | 3525 |
| 3526 RestParameter* NewRestParameter(VariableProxy* parameter, int literal_index, |
| 3527 int position) { |
| 3528 DCHECK_NOT_NULL(parameter); |
| 3529 DCHECK(literal_index >= 0); |
| 3530 DCHECK(position >= 0); |
| 3531 |
| 3532 return new (zone_) RestParameter(zone_, parameter, literal_index, position); |
| 3533 } |
| 3534 |
3502 Property* NewProperty(Expression* obj, Expression* key, int pos) { | 3535 Property* NewProperty(Expression* obj, Expression* key, int pos) { |
3503 return new (zone_) Property(zone_, obj, key, pos); | 3536 return new (zone_) Property(zone_, obj, key, pos); |
3504 } | 3537 } |
3505 | 3538 |
3506 Call* NewCall(Expression* expression, | 3539 Call* NewCall(Expression* expression, |
3507 ZoneList<Expression*>* arguments, | 3540 ZoneList<Expression*>* arguments, |
3508 int pos) { | 3541 int pos) { |
3509 return new (zone_) Call(zone_, expression, arguments, pos); | 3542 return new (zone_) Call(zone_, expression, arguments, pos); |
3510 } | 3543 } |
3511 | 3544 |
(...skipping 142 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3654 | 3687 |
3655 private: | 3688 private: |
3656 Zone* zone_; | 3689 Zone* zone_; |
3657 AstValueFactory* ast_value_factory_; | 3690 AstValueFactory* ast_value_factory_; |
3658 }; | 3691 }; |
3659 | 3692 |
3660 | 3693 |
3661 } } // namespace v8::internal | 3694 } } // namespace v8::internal |
3662 | 3695 |
3663 #endif // V8_AST_H_ | 3696 #endif // V8_AST_H_ |
OLD | NEW |