Index: pkg/front_end/lib/src/fasta/parser/parser.dart |
diff --git a/pkg/front_end/lib/src/fasta/parser/parser.dart b/pkg/front_end/lib/src/fasta/parser/parser.dart |
index 149b86c599880b840fa52a95003d254246d53757..516ad61e9024d34db655c7895af28e80a9be0489 100644 |
--- a/pkg/front_end/lib/src/fasta/parser/parser.dart |
+++ b/pkg/front_end/lib/src/fasta/parser/parser.dart |
@@ -2598,7 +2598,8 @@ class Parser { |
// should just call [parseUnaryExpression] directly. However, a |
// unary expression isn't legal after a period, so we call |
// [parsePrimary] instead. |
- token = parsePrimary(token.next); |
+ token = parsePrimary( |
+ token.next, IdentifierContext.expressionContinuation); |
listener.handleBinaryExpression(operator); |
} else if ((identical(info, OPEN_PAREN_INFO)) || |
(identical(info, OPEN_SQUARE_BRACKET_INFO))) { |
@@ -2676,7 +2677,7 @@ class Parser { |
// Prefix: |
if (optional('await', token)) { |
if (inPlainSync) { |
- return parsePrimary(token); |
+ return parsePrimary(token, IdentifierContext.expression); |
} else { |
return parseAwaitExpression(token, allowCascades); |
} |
@@ -2704,7 +2705,7 @@ class Parser { |
listener.handleUnaryPrefixAssignmentExpression(operator); |
return token; |
} else { |
- return parsePrimary(token); |
+ return parsePrimary(token, IdentifierContext.expression); |
} |
} |
@@ -2730,10 +2731,10 @@ class Parser { |
return token; |
} |
- Token parsePrimary(Token token) { |
+ Token parsePrimary(Token token, IdentifierContext context) { |
final kind = token.kind; |
if (kind == IDENTIFIER_TOKEN) { |
- return parseSendOrFunctionLiteral(token); |
+ return parseSendOrFunctionLiteral(token, context); |
} else if (kind == INT_TOKEN || kind == HEXADECIMAL_TOKEN) { |
return parseLiteralInt(token); |
} else if (kind == DOUBLE_TOKEN) { |
@@ -2749,9 +2750,9 @@ class Parser { |
} else if (identical(value, "null")) { |
return parseLiteralNull(token); |
} else if (identical(value, "this")) { |
- return parseThisExpression(token); |
+ return parseThisExpression(token, context); |
} else if (identical(value, "super")) { |
- return parseSuperExpression(token); |
+ return parseSuperExpression(token, context); |
} else if (identical(value, "new")) { |
return parseNewExpression(token); |
} else if (identical(value, "const")) { |
@@ -2762,7 +2763,7 @@ class Parser { |
(identical(value, "yield") || identical(value, "async"))) { |
return expressionExpected(token); |
} else if (token.isIdentifier()) { |
- return parseSendOrFunctionLiteral(token); |
+ return parseSendOrFunctionLiteral(token, context); |
} else { |
return expressionExpected(token); |
} |
@@ -2824,9 +2825,9 @@ class Parser { |
return expect(')', token); |
} |
- Token parseThisExpression(Token token) { |
+ Token parseThisExpression(Token token, IdentifierContext context) { |
Token beginToken = token; |
- listener.handleThisExpression(token); |
+ listener.handleThisExpression(token, context); |
token = token.next; |
if (optional('(', token)) { |
// Constructor forwarding. |
@@ -2837,9 +2838,9 @@ class Parser { |
return token; |
} |
- Token parseSuperExpression(Token token) { |
+ Token parseSuperExpression(Token token, IdentifierContext context) { |
Token beginToken = token; |
- listener.handleSuperExpression(token); |
+ listener.handleSuperExpression(token, context); |
token = token.next; |
if (optional('(', token)) { |
// Super constructor. |
@@ -2965,9 +2966,9 @@ class Parser { |
return token; |
} |
- Token parseSendOrFunctionLiteral(Token token) { |
+ Token parseSendOrFunctionLiteral(Token token, IdentifierContext context) { |
if (!mayParseFunctionExpressions) { |
- return parseSend(token, IdentifierContext.expression); |
+ return parseSend(token, context); |
} |
Token peek = peekAfterIfType(token); |
if (peek != null && |
@@ -2977,7 +2978,7 @@ class Parser { |
} else if (isFunctionDeclaration(token.next)) { |
return parseFunctionExpression(token); |
} else { |
- return parseSend(token, IdentifierContext.expression); |
+ return parseSend(token, context); |
} |
} |