| 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();
|
| }
|
|
|
|
|