Chromium Code Reviews| Index: src/preparser.h |
| diff --git a/src/preparser.h b/src/preparser.h |
| index d890ae5c216d7b497d0f3801288bd2fe7c4123fb..fc6294de833c7e06a978c98be281572c39b20f8f 100644 |
| --- a/src/preparser.h |
| +++ b/src/preparser.h |
| @@ -714,9 +714,10 @@ class ParserBase : public Traits { |
| ExpressionT ParseMemberExpression(ExpressionClassifier* classifier, bool* ok); |
| ExpressionT ParseMemberExpressionContinuation( |
| ExpressionT expression, ExpressionClassifier* classifier, bool* ok); |
| - ExpressionT ParseArrowFunctionLiteral( |
| - const FormalParametersT& parameters, |
| - const ExpressionClassifier& classifier, bool* ok); |
| + ExpressionT ParseArrowFunctionLiteral(bool accept_IN, |
| + const FormalParametersT& parameters, |
| + const ExpressionClassifier& classifier, |
| + bool* ok); |
| ExpressionT ParseTemplateLiteral(ExpressionT tag, int start, |
| ExpressionClassifier* classifier, bool* ok); |
| void AddTemplateExpression(ExpressionT); |
| @@ -1074,6 +1075,9 @@ class PreParserExpression { |
| PreParserExpression AsFunctionLiteral() { return *this; } |
| + // Only used by arrow functions with concise bodies, only for lazy parsing. |
| + void set_accept_IN(bool value) {} |
| + |
| bool IsBinaryOperation() const { |
| return TypeField::decode(code_) == kBinaryOperationExpression; |
| } |
| @@ -2946,7 +2950,7 @@ ParserBase<Traits>::ParseAssignmentExpression(bool accept_IN, |
| duplicate_loc); |
| } |
| expression = this->ParseArrowFunctionLiteral( |
| - parameters, arrow_formals_classifier, CHECK_OK); |
| + accept_IN, parameters, arrow_formals_classifier, CHECK_OK); |
| return expression; |
| } |
| @@ -3882,7 +3886,7 @@ bool ParserBase<Traits>::IsNextLetKeyword() { |
| template <class Traits> |
| typename ParserBase<Traits>::ExpressionT |
| ParserBase<Traits>::ParseArrowFunctionLiteral( |
| - const FormalParametersT& formal_parameters, |
| + bool accept_IN, const FormalParametersT& formal_parameters, |
| const ExpressionClassifier& formals_classifier, bool* ok) { |
| if (peek() == Token::ARROW && scanner_->HasAnyLineTerminatorBeforeNext()) { |
| // ASI inserts `;` after arrow parameters if a line terminator is found. |
| @@ -3898,6 +3902,7 @@ ParserBase<Traits>::ParseArrowFunctionLiteral( |
| int materialized_literal_count = -1; |
| int expected_property_count = -1; |
| Scanner::Location super_loc; |
| + bool concise = false; |
|
adamk
2015/10/14 12:46:44
I don't see this used anywhere (other than it bein
caitp (gmail)
2015/10/14 13:20:18
probably left over from an older version of the pa
|
| { |
| typename Traits::Type::Factory function_factory(ast_value_factory()); |
| @@ -3936,11 +3941,12 @@ ParserBase<Traits>::ParseArrowFunctionLiteral( |
| } |
| } else { |
| // Single-expression body |
| + concise = true; |
| int pos = position(); |
| parenthesized_function_ = false; |
| ExpressionClassifier classifier; |
| ExpressionT expression = |
| - ParseAssignmentExpression(true, &classifier, CHECK_OK); |
| + ParseAssignmentExpression(accept_IN, &classifier, CHECK_OK); |
| ValidateExpression(&classifier, CHECK_OK); |
| body = this->NewStatementList(1, zone()); |
| this->AddParameterInitializationBlock(formal_parameters, body, CHECK_OK); |
| @@ -3983,6 +3989,8 @@ ParserBase<Traits>::ParseArrowFunctionLiteral( |
| formal_parameters.scope->start_position()); |
| if (super_loc.IsValid()) function_state_->set_super_location(super_loc); |
| + function_literal->set_accept_IN(accept_IN); |
| + |
| if (fni_ != NULL) this->InferFunctionName(fni_, function_literal); |
| return function_literal; |