Index: src/preparser.h |
diff --git a/src/preparser.h b/src/preparser.h |
index a3ae91c60281e4df0950049aa0170c10a717a6e4..3bd0953cb627122adaf0691918545a8034469ecb 100644 |
--- a/src/preparser.h |
+++ b/src/preparser.h |
@@ -103,7 +103,7 @@ class ParserBase : public Traits { |
allow_harmony_sloppy_(false), |
allow_harmony_sloppy_let_(false), |
allow_harmony_computed_property_names_(false), |
- allow_harmony_rest_params_(false), |
+ allow_harmony_rest_parameters_(false), |
allow_harmony_spreadcalls_(false), |
allow_harmony_destructuring_(false), |
allow_harmony_spread_arrays_(false), |
@@ -121,7 +121,7 @@ class ParserBase : public Traits { |
ALLOW_ACCESSORS(harmony_sloppy); |
ALLOW_ACCESSORS(harmony_sloppy_let); |
ALLOW_ACCESSORS(harmony_computed_property_names); |
- ALLOW_ACCESSORS(harmony_rest_params); |
+ ALLOW_ACCESSORS(harmony_rest_parameters); |
ALLOW_ACCESSORS(harmony_spreadcalls); |
ALLOW_ACCESSORS(harmony_destructuring); |
ALLOW_ACCESSORS(harmony_spread_arrays); |
@@ -702,8 +702,8 @@ class ParserBase : public Traits { |
void ParseFormalParameter(bool is_rest, |
FormalParametersT* parameters, |
ExpressionClassifier* classifier, bool* ok); |
- int ParseFormalParameterList(FormalParametersT* parameters, |
- ExpressionClassifier* classifier, bool* ok); |
+ void ParseFormalParameterList(FormalParametersT* parameters, |
+ ExpressionClassifier* classifier, bool* ok); |
void CheckArityRestrictions( |
int param_count, FunctionLiteral::ArityRestriction arity_restriction, |
bool has_rest, int formals_start_pos, int formals_end_pos, bool* ok); |
@@ -801,7 +801,7 @@ class ParserBase : public Traits { |
bool allow_harmony_sloppy_; |
bool allow_harmony_sloppy_let_; |
bool allow_harmony_computed_property_names_; |
- bool allow_harmony_rest_params_; |
+ bool allow_harmony_rest_parameters_; |
bool allow_harmony_spreadcalls_; |
bool allow_harmony_destructuring_; |
bool allow_harmony_spread_arrays_; |
@@ -1315,10 +1315,12 @@ class PreParserFactory { |
struct PreParserFormalParameters { |
explicit PreParserFormalParameters(Scope* scope) |
: scope(scope), |
+ arity(0), |
has_rest(false), |
is_simple(true), |
materialized_literals_count(0) {} |
Scope* scope; |
+ int arity; |
bool has_rest; |
bool is_simple; |
int materialized_literals_count; |
@@ -2274,7 +2276,7 @@ ParserBase<Traits>::ParsePrimaryExpression(ExpressionClassifier* classifier, |
result = this->ParseArrowFunctionLiteral(parameters, args_classifier, |
CHECK_OK); |
} else if (allow_harmony_arrow_functions() && |
- allow_harmony_rest_params() && Check(Token::ELLIPSIS)) { |
+ allow_harmony_rest_parameters() && Check(Token::ELLIPSIS)) { |
// (...x) => y |
Scope* scope = |
this->NewScope(scope_, ARROW_SCOPE, FunctionKind::kArrowFunction); |
@@ -2386,7 +2388,7 @@ typename ParserBase<Traits>::ExpressionT ParserBase<Traits>::ParseExpression( |
} |
Consume(Token::COMMA); |
bool is_rest = false; |
- if (allow_harmony_rest_params() && peek() == Token::ELLIPSIS) { |
+ if (allow_harmony_rest_parameters() && peek() == Token::ELLIPSIS) { |
// 'x, y, ...z' in CoverParenthesizedExpressionAndArrowParameterList only |
// as the formal parameters of'(x, y, ...z) => foo', and is not itself a |
// valid expression or binding pattern. |
@@ -3645,12 +3647,13 @@ void ParserBase<Traits>::ParseFormalParameter( |
*ok = false; |
return; |
} |
+ ++parameters->arity; |
Traits::DeclareFormalParameter(parameters, pattern, is_rest, classifier); |
} |
template <class Traits> |
-int ParserBase<Traits>::ParseFormalParameterList( |
+void ParserBase<Traits>::ParseFormalParameterList( |
FormalParametersT* parameters, ExpressionClassifier* classifier, bool* ok) { |
// FormalParameters[Yield,GeneratorParameter] : |
// [empty] |
@@ -3666,29 +3669,26 @@ int ParserBase<Traits>::ParseFormalParameterList( |
// FormalsList[?Yield, ?GeneratorParameter] , |
// FormalParameter[?Yield,?GeneratorParameter] |
- int arity = 0; |
+ DCHECK_EQ(0, parameters->arity); |
if (peek() != Token::RPAREN) { |
do { |
- if (++arity > Code::kMaxArguments) { |
+ if (parameters->arity > Code::kMaxArguments) { |
ReportMessage(MessageTemplate::kTooManyParameters); |
*ok = false; |
- return -1; |
+ return; |
} |
- bool is_rest = allow_harmony_rest_params() && Check(Token::ELLIPSIS); |
+ bool is_rest = allow_harmony_rest_parameters() && Check(Token::ELLIPSIS); |
ParseFormalParameter(is_rest, parameters, classifier, ok); |
- if (!*ok) return -1; |
+ if (!*ok) return; |
} while (!parameters->has_rest && Check(Token::COMMA)); |
if (parameters->has_rest && peek() == Token::COMMA) { |
ReportMessageAt(scanner()->peek_location(), |
MessageTemplate::kParamAfterRest); |
*ok = false; |
- return -1; |
} |
} |
- |
- return arity; |
} |