Index: src/parser.cc |
diff --git a/src/parser.cc b/src/parser.cc |
index 211f737d6d89c9fd202f9b1cd0af233c50a04627..ae2dd5f8028237547d4a751b813e110e8819548b 100644 |
--- a/src/parser.cc |
+++ b/src/parser.cc |
@@ -964,10 +964,8 @@ Statement* Parser::ParseModuleElement(ZoneStringList* labels, |
!scanner().HasAnyLineTerminatorBeforeNext() && |
stmt != NULL) { |
ExpressionStatement* estmt = stmt->AsExpressionStatement(); |
- if (estmt != NULL && |
- estmt->expression()->AsVariableProxy() != NULL && |
- estmt->expression()->AsVariableProxy()->name()->Equals( |
- isolate()->heap()->module_string()) && |
+ if (estmt != NULL && estmt->expression()->IsIdentifierNamed( |
+ isolate()->heap()->module_string()) && |
!scanner().literal_contains_escapes()) { |
return ParseModuleDeclaration(NULL, ok); |
} |
@@ -2126,9 +2124,11 @@ Statement* Parser::ParseExpressionOrLabelledStatement(ZoneStringList* labels, |
int pos = peek_position(); |
bool starts_with_idenfifier = peek_any_identifier(); |
Expression* expr = ParseExpression(true, CHECK_OK); |
+ // Even if the expression starts with an identifier, it is not necessarily an |
+ // identifier. For example, "foo + bar" starts with an identifier but is not |
+ // an identifier. |
if (peek() == Token::COLON && starts_with_idenfifier && expr != NULL && |
- expr->AsVariableProxy() != NULL && |
- !expr->AsVariableProxy()->is_this()) { |
+ expr->IsIdentifier()) { |
// Expression is a single identifier, and not, e.g., a parenthesized |
// identifier. |
VariableProxy* var = expr->AsVariableProxy(); |
@@ -2165,9 +2165,7 @@ Statement* Parser::ParseExpressionOrLabelledStatement(ZoneStringList* labels, |
peek() == Token::FUNCTION && |
!scanner().HasAnyLineTerminatorBeforeNext() && |
expr != NULL && |
- expr->AsVariableProxy() != NULL && |
- expr->AsVariableProxy()->name()->Equals( |
- isolate()->heap()->native_string()) && |
+ expr->IsIdentifierNamed(isolate()->heap()->native_string()) && |
!scanner().literal_contains_escapes()) { |
return ParseNativeDeclaration(ok); |
} |
@@ -2177,9 +2175,7 @@ Statement* Parser::ParseExpressionOrLabelledStatement(ZoneStringList* labels, |
if (!FLAG_harmony_modules || |
peek() != Token::IDENTIFIER || |
scanner().HasAnyLineTerminatorBeforeNext() || |
- expr->AsVariableProxy() == NULL || |
- !expr->AsVariableProxy()->name()->Equals( |
- isolate()->heap()->module_string()) || |
+ !expr->IsIdentifierNamed(isolate()->heap()->module_string()) || |
scanner().literal_contains_escapes()) { |
ExpectSemicolon(CHECK_OK); |
} |
@@ -2946,8 +2942,7 @@ Expression* Parser::ParseAssignmentExpression(bool accept_IN, bool* ok) { |
Property* property = expression ? expression->AsProperty() : NULL; |
if (op == Token::ASSIGN && |
property != NULL && |
- property->obj()->AsVariableProxy() != NULL && |
- property->obj()->AsVariableProxy()->is_this()) { |
+ property->obj()->IsIdentifier()) { |
current_function_state_->AddProperty(); |
} |