Chromium Code Reviews| Index: src/parsing/parser.cc |
| diff --git a/src/parsing/parser.cc b/src/parsing/parser.cc |
| index c2d32c0d94ee0ffd6f406b67259fab83c054d87d..d841d66e240bbd8a8bd5acab899a09eae0431028 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,7 +3917,13 @@ void ParserTraits::ParseArrowFunctionFormalParameterList( |
| Scanner::Location* duplicate_loc, bool* ok) { |
| if (expr->IsEmptyParentheses()) return; |
| - ParseArrowFunctionFormalParameters(parameters, expr, params_loc, ok); |
| + if (parameters->Arity() >= Code::kMaxArguments) { |
|
nickie
2016/04/20 11:01:41
I'm not sure if exactly Code::kMaxArguments (65535
adamk
2016/04/20 18:51:45
Indeed, ">" is the comparison used elsewhere. Will
|
| + ReportMessageAt(params_loc, MessageTemplate::kMalformedArrowFunParamList); |
| + *ok = false; |
| + return; |
| + } |
| + |
|
nickie
2016/04/20 11:01:41
I believe that putting these five lines here does
adamk
2016/04/20 18:51:45
Ah, I misunderstood what the Arity() function did.
|
| + ParseArrowFunctionFormalParameters(parameters, expr, params_loc.end_pos, ok); |
| if (!*ok) return; |
| Type::ExpressionClassifier classifier(parser_); |