| Index: src/parser.cc
|
| diff --git a/src/parser.cc b/src/parser.cc
|
| index 2961a1aeb8e4e52ff0fadd8c1bbc4e6430ea4c0c..b9ae09add71346d7001fafc133fa809dd7f65e49 100644
|
| --- a/src/parser.cc
|
| +++ b/src/parser.cc
|
| @@ -1146,8 +1146,10 @@ FunctionLiteral* Parser::ParseLazy(Isolate* isolate, ParseInfo* info,
|
| }
|
|
|
| if (ok) {
|
| - Expression* expression =
|
| - ParseArrowFunctionLiteral(scope, error_locs, has_rest, &ok);
|
| + ExpressionClassifier classifier;
|
| + Expression* expression = ParseArrowFunctionLiteral(
|
| + scope, error_locs, has_rest, &classifier, &ok);
|
| + // TODO(dslomov): report error if not a valid expression.
|
| if (ok) {
|
| // Scanning must end at the same position that was recorded
|
| // previously. If not, parsing has been interrupted due to a stack
|
| @@ -1614,7 +1616,10 @@ Statement* Parser::ParseExportDefault(bool* ok) {
|
|
|
| default: {
|
| int pos = peek_position();
|
| - Expression* expr = ParseAssignmentExpression(true, CHECK_OK);
|
| + ExpressionClassifier classifier;
|
| + Expression* expr = ParseAssignmentExpression(true, &classifier, CHECK_OK);
|
| + // TODO(dslomov): report error if not a valid expression.
|
| +
|
| ExpectSemicolon(CHECK_OK);
|
| result = factory()->NewExpressionStatement(expr, pos);
|
| break;
|
| @@ -2428,7 +2433,10 @@ Block* Parser::ParseVariableDeclarations(
|
| (mode == CONST && !is_for_iteration_variable)) {
|
| Expect(Token::ASSIGN, CHECK_OK);
|
| pos = position();
|
| - value = ParseAssignmentExpression(var_context != kForStatement, CHECK_OK);
|
| + ExpressionClassifier classifier;
|
| + value = ParseAssignmentExpression(var_context != kForStatement,
|
| + &classifier, CHECK_OK);
|
| + // TODO(dslomov): check that expression is valid.
|
| variable_loc.end_pos = scanner()->location().end_pos;
|
|
|
| if (first_initializer_loc && !first_initializer_loc->IsValid()) {
|
| @@ -2613,11 +2621,13 @@ Statement* Parser::ParseExpressionOrLabelledStatement(
|
| i::IsConstructor(function_state_->kind())) {
|
| bool is_this = peek() == Token::THIS;
|
| Expression* expr;
|
| + ExpressionClassifier classifier;
|
| if (is_this) {
|
| - expr = ParseStrongInitializationExpression(CHECK_OK);
|
| + expr = ParseStrongInitializationExpression(&classifier, CHECK_OK);
|
| } else {
|
| - expr = ParseStrongSuperCallExpression(CHECK_OK);
|
| + expr = ParseStrongSuperCallExpression(&classifier, CHECK_OK);
|
| }
|
| + // TODO(dslomov): report error if not a valid expression.
|
| switch (peek()) {
|
| case Token::SEMICOLON:
|
| Consume(Token::SEMICOLON);
|
| @@ -4338,7 +4348,9 @@ ClassLiteral* Parser::ParseClassLiteral(const AstRawString* name,
|
| Expression* extends = NULL;
|
| if (Check(Token::EXTENDS)) {
|
| block_scope->set_start_position(scanner()->location().end_pos);
|
| - extends = ParseLeftHandSideExpression(CHECK_OK);
|
| + ExpressionClassifier classifier;
|
| + extends = ParseLeftHandSideExpression(&classifier, CHECK_OK);
|
| + // TODO(dslomov): report error if not a valid expression.
|
| } else {
|
| block_scope->set_start_position(scanner()->location().end_pos);
|
| }
|
| @@ -4359,9 +4371,11 @@ ClassLiteral* Parser::ParseClassLiteral(const AstRawString* name,
|
| const bool is_static = false;
|
| bool is_computed_name = false; // Classes do not care about computed
|
| // property names here.
|
| + ExpressionClassifier classifier;
|
| ObjectLiteral::Property* property = ParsePropertyDefinition(
|
| &checker, in_class, has_extends, is_static, &is_computed_name,
|
| - &has_seen_constructor, CHECK_OK);
|
| + &has_seen_constructor, &classifier, CHECK_OK);
|
| + // TODO(dslomov): report error if not a valid expression.
|
|
|
| if (has_seen_constructor && constructor == NULL) {
|
| constructor = GetPropertyValue(property)->AsFunctionLiteral();
|
| @@ -4410,7 +4424,10 @@ Expression* Parser::ParseV8Intrinsic(bool* ok) {
|
| const AstRawString* name = ParseIdentifier(kAllowRestrictedIdentifiers,
|
| CHECK_OK);
|
| Scanner::Location spread_pos;
|
| - ZoneList<Expression*>* args = ParseArguments(&spread_pos, CHECK_OK);
|
| + ExpressionClassifier classifier;
|
| + ZoneList<Expression*>* args =
|
| + ParseArguments(&spread_pos, &classifier, CHECK_OK);
|
| + // TODO(dslomov): report error if not a valid expression.
|
|
|
| DCHECK(!spread_pos.IsValid());
|
|
|
|
|