Index: src/ast.h |
diff --git a/src/ast.h b/src/ast.h |
index 7eb73d9023547f9587a95aec5d64d6153c8b2fdb..6eb4f16f3a6d0fd24492f3847311237805060eac 100644 |
--- a/src/ast.h |
+++ b/src/ast.h |
@@ -89,7 +89,8 @@ namespace internal { |
V(SuperPropertyReference) \ |
V(SuperCallReference) \ |
V(CaseClause) \ |
- V(EmptyParentheses) |
+ V(EmptyParentheses) \ |
+ V(RestParameter) |
#define AST_NODE_LIST(V) \ |
DECLARATION_NODE_LIST(V) \ |
@@ -1730,6 +1731,29 @@ class VariableProxy final : public Expression { |
}; |
+class RestParameter final : public Expression { |
+ public: |
+ DECLARE_NODE_TYPE(RestParameter) |
+ |
+ VariableProxy* parameter() const { return parameter_; } |
+ int literal_index() const { return literal_index_; } |
+ |
+ int end_position() const { return parameter_->end_position(); } |
+ |
+ protected: |
+ RestParameter(Zone* zone, VariableProxy* parameter, int literal_index, |
+ int position) |
+ : Expression(zone, position), |
+ parameter_(parameter), |
+ literal_index_(literal_index) {} |
+ |
+ VariableProxy* parameter_; |
+ int literal_index_; |
+ |
+ friend class AstLiteralReindexer; |
+}; |
+ |
+ |
// Left-hand side can only be a property, a global or a (parameter or local) |
// slot. |
enum LhsKind { |
@@ -3499,6 +3523,15 @@ class AstNodeFactory final BASE_EMBEDDED { |
VariableProxy(zone_, name, variable_kind, start_position, end_position); |
} |
+ RestParameter* NewRestParameter(VariableProxy* parameter, int literal_index, |
+ int position) { |
+ DCHECK_NOT_NULL(parameter); |
+ DCHECK(literal_index >= 0); |
+ DCHECK(position >= 0); |
+ |
+ return new (zone_) RestParameter(zone_, parameter, literal_index, position); |
+ } |
+ |
Property* NewProperty(Expression* obj, Expression* key, int pos) { |
return new (zone_) Property(zone_, obj, key, pos); |
} |