| Index: src/parsing/parser.cc
|
| diff --git a/src/parsing/parser.cc b/src/parsing/parser.cc
|
| index c2d32c0d94ee0ffd6f406b67259fab83c054d87d..6f9702947fe04ff081baa1d3acbe471f83e4975d 100644
|
| --- a/src/parsing/parser.cc
|
| +++ b/src/parsing/parser.cc
|
| @@ -3827,16 +3827,9 @@ Handle<FixedArray> CompileTimeValue::GetElements(Handle<FixedArray> value) {
|
| return Handle<FixedArray>(FixedArray::cast(value->get(kElementsSlot)));
|
| }
|
|
|
| -
|
| void ParserTraits::ParseArrowFunctionFormalParameters(
|
| - ParserFormalParameters* parameters, Expression* expr,
|
| - const Scanner::Location& params_loc, bool* ok) {
|
| - if (parameters->Arity() >= Code::kMaxArguments) {
|
| - ReportMessageAt(params_loc, MessageTemplate::kMalformedArrowFunParamList);
|
| - *ok = false;
|
| - return;
|
| - }
|
| -
|
| + ParserFormalParameters* parameters, Expression* expr, int end_pos,
|
| + bool* ok) {
|
| // ArrowFunctionFormals ::
|
| // Binary(Token::COMMA, NonTailArrowFunctionFormals, Tail)
|
| // Tail
|
| @@ -3857,7 +3850,8 @@ void ParserTraits::ParseArrowFunctionFormalParameters(
|
| DCHECK_EQ(binop->op(), Token::COMMA);
|
| Expression* left = binop->left();
|
| Expression* right = binop->right();
|
| - ParseArrowFunctionFormalParameters(parameters, left, params_loc, ok);
|
| + int comma_pos = binop->position();
|
| + ParseArrowFunctionFormalParameters(parameters, left, comma_pos, ok);
|
| if (!*ok) return;
|
| // LHS of comma expression should be unparenthesized.
|
| expr = right;
|
| @@ -3894,11 +3888,7 @@ void ParserTraits::ParseArrowFunctionFormalParameters(
|
| parser_->scope_, parameters->scope);
|
| }
|
|
|
| - // TODO(adamk): params_loc.end_pos is not the correct initializer position,
|
| - // but it should be conservative enough to trigger hole checks for variables
|
| - // referenced in the initializer (if any).
|
| - AddFormalParameter(parameters, expr, initializer, params_loc.end_pos,
|
| - is_rest);
|
| + AddFormalParameter(parameters, expr, initializer, end_pos, is_rest);
|
| }
|
|
|
|
|
| @@ -3927,9 +3917,15 @@ void ParserTraits::ParseArrowFunctionFormalParameterList(
|
| Scanner::Location* duplicate_loc, bool* ok) {
|
| if (expr->IsEmptyParentheses()) return;
|
|
|
| - ParseArrowFunctionFormalParameters(parameters, expr, params_loc, ok);
|
| + ParseArrowFunctionFormalParameters(parameters, expr, params_loc.end_pos, ok);
|
| if (!*ok) return;
|
|
|
| + if (parameters->Arity() > Code::kMaxArguments) {
|
| + ReportMessageAt(params_loc, MessageTemplate::kMalformedArrowFunParamList);
|
| + *ok = false;
|
| + return;
|
| + }
|
| +
|
| Type::ExpressionClassifier classifier(parser_);
|
| if (!parameters->is_simple) {
|
| classifier.RecordNonSimpleParameter();
|
|
|