Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(404)

Unified Diff: pkg/analyzer/lib/src/generated/parser.dart

Issue 725143004: Format and sort analyzer and analysis_server packages. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 6 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « pkg/analyzer/lib/src/generated/java_io.dart ('k') | pkg/analyzer/lib/src/generated/resolver.dart » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: pkg/analyzer/lib/src/generated/parser.dart
diff --git a/pkg/analyzer/lib/src/generated/parser.dart b/pkg/analyzer/lib/src/generated/parser.dart
index 0a2f0619e614949820829b144317319f3d59163e..60c522b87bed8440cd01cf81f2f261c84d127c71 100644
--- a/pkg/analyzer/lib/src/generated/parser.dart
+++ b/pkg/analyzer/lib/src/generated/parser.dart
@@ -7,19 +7,621 @@
library engine.parser;
-import 'dart:collection';
import "dart:math" as math;
+import 'dart:collection';
+import 'ast.dart';
+import 'engine.dart' show AnalysisEngine, AnalysisOptionsImpl;
+import 'error.dart';
+import 'instrumentation.dart';
import 'java_core.dart';
import 'java_engine.dart';
-import 'instrumentation.dart';
-import 'error.dart';
-import 'source.dart';
import 'scanner.dart';
-import 'ast.dart';
-import 'utilities_dart.dart';
-import 'engine.dart' show AnalysisEngine, AnalysisOptionsImpl;
+import 'source.dart';
import 'utilities_collection.dart' show TokenMap;
+import 'utilities_dart.dart';
+
+Map<String, MethodTrampoline> methodTable_Parser = <String, MethodTrampoline>{
+ 'parseCompilationUnit_1': new MethodTrampoline(
+ 1,
+ (Parser target, arg0) => target.parseCompilationUnit(arg0)),
+ 'parseDirectives_1': new MethodTrampoline(
+ 1,
+ (Parser target, arg0) => target.parseDirectives(arg0)),
+ 'parseExpression_1': new MethodTrampoline(
+ 1,
+ (Parser target, arg0) => target.parseExpression(arg0)),
+ 'parseStatement_1': new MethodTrampoline(
+ 1,
+ (Parser target, arg0) => target.parseStatement(arg0)),
+ 'parseStatements_1': new MethodTrampoline(
+ 1,
+ (Parser target, arg0) => target.parseStatements(arg0)),
+ 'parseAnnotation_0': new MethodTrampoline(
+ 0,
+ (Parser target) => target.parseAnnotation()),
+ 'parseArgument_0': new MethodTrampoline(
+ 0,
+ (Parser target) => target.parseArgument()),
+ 'parseArgumentList_0': new MethodTrampoline(
+ 0,
+ (Parser target) => target.parseArgumentList()),
+ 'parseBitwiseOrExpression_0': new MethodTrampoline(
+ 0,
+ (Parser target) => target.parseBitwiseOrExpression()),
+ 'parseBlock_0': new MethodTrampoline(
+ 0,
+ (Parser target) => target.parseBlock()),
+ 'parseClassMember_1': new MethodTrampoline(
+ 1,
+ (Parser target, arg0) => target.parseClassMember(arg0)),
+ 'parseCompilationUnit_0': new MethodTrampoline(
+ 0,
+ (Parser target) => target.parseCompilationUnit2()),
+ 'parseConditionalExpression_0': new MethodTrampoline(
+ 0,
+ (Parser target) => target.parseConditionalExpression()),
+ 'parseConstructorName_0': new MethodTrampoline(
+ 0,
+ (Parser target) => target.parseConstructorName()),
+ 'parseExpression_0': new MethodTrampoline(
+ 0,
+ (Parser target) => target.parseExpression2()),
+ 'parseExpressionWithoutCascade_0': new MethodTrampoline(
+ 0,
+ (Parser target) => target.parseExpressionWithoutCascade()),
+ 'parseExtendsClause_0': new MethodTrampoline(
+ 0,
+ (Parser target) => target.parseExtendsClause()),
+ 'parseFormalParameterList_0': new MethodTrampoline(
+ 0,
+ (Parser target) => target.parseFormalParameterList()),
+ 'parseFunctionExpression_0': new MethodTrampoline(
+ 0,
+ (Parser target) => target.parseFunctionExpression()),
+ 'parseImplementsClause_0': new MethodTrampoline(
+ 0,
+ (Parser target) => target.parseImplementsClause()),
+ 'parseLabel_0': new MethodTrampoline(
+ 0,
+ (Parser target) => target.parseLabel()),
+ 'parseLibraryIdentifier_0': new MethodTrampoline(
+ 0,
+ (Parser target) => target.parseLibraryIdentifier()),
+ 'parseLogicalOrExpression_0': new MethodTrampoline(
+ 0,
+ (Parser target) => target.parseLogicalOrExpression()),
+ 'parseMapLiteralEntry_0': new MethodTrampoline(
+ 0,
+ (Parser target) => target.parseMapLiteralEntry()),
+ 'parseNormalFormalParameter_0': new MethodTrampoline(
+ 0,
+ (Parser target) => target.parseNormalFormalParameter()),
+ 'parsePrefixedIdentifier_0': new MethodTrampoline(
+ 0,
+ (Parser target) => target.parsePrefixedIdentifier()),
+ 'parseReturnType_0': new MethodTrampoline(
+ 0,
+ (Parser target) => target.parseReturnType()),
+ 'parseSimpleIdentifier_0': new MethodTrampoline(
+ 0,
+ (Parser target) => target.parseSimpleIdentifier()),
+ 'parseStatement_0': new MethodTrampoline(
+ 0,
+ (Parser target) => target.parseStatement2()),
+ 'parseStringLiteral_0': new MethodTrampoline(
+ 0,
+ (Parser target) => target.parseStringLiteral()),
+ 'parseTypeArgumentList_0': new MethodTrampoline(
+ 0,
+ (Parser target) => target.parseTypeArgumentList()),
+ 'parseTypeName_0': new MethodTrampoline(
+ 0,
+ (Parser target) => target.parseTypeName()),
+ 'parseTypeParameter_0': new MethodTrampoline(
+ 0,
+ (Parser target) => target.parseTypeParameter()),
+ 'parseTypeParameterList_0': new MethodTrampoline(
+ 0,
+ (Parser target) => target.parseTypeParameterList()),
+ 'parseWithClause_0': new MethodTrampoline(
+ 0,
+ (Parser target) => target.parseWithClause()),
+ 'advance_0': new MethodTrampoline(0, (Parser target) => target._advance()),
+ 'appendScalarValue_5': new MethodTrampoline(
+ 5,
+ (Parser target, arg0, arg1, arg2, arg3, arg4) =>
+ target._appendScalarValue(arg0, arg1, arg2, arg3, arg4)),
+ 'computeStringValue_3': new MethodTrampoline(
+ 3,
+ (Parser target, arg0, arg1, arg2) =>
+ target._computeStringValue(arg0, arg1, arg2)),
+ 'convertToFunctionDeclaration_1': new MethodTrampoline(
+ 1,
+ (Parser target, arg0) => target._convertToFunctionDeclaration(arg0)),
+ 'couldBeStartOfCompilationUnitMember_0': new MethodTrampoline(
+ 0,
+ (Parser target) => target._couldBeStartOfCompilationUnitMember()),
+ 'createSyntheticIdentifier_0': new MethodTrampoline(
+ 0,
+ (Parser target) => target._createSyntheticIdentifier()),
+ 'createSyntheticKeyword_1': new MethodTrampoline(
+ 1,
+ (Parser target, arg0) => target._createSyntheticKeyword(arg0)),
+ 'createSyntheticStringLiteral_0': new MethodTrampoline(
+ 0,
+ (Parser target) => target._createSyntheticStringLiteral()),
+ 'createSyntheticToken_1': new MethodTrampoline(
+ 1,
+ (Parser target, arg0) => target._createSyntheticToken(arg0)),
+ 'ensureAssignable_1': new MethodTrampoline(
+ 1,
+ (Parser target, arg0) => target._ensureAssignable(arg0)),
+ 'expect_1': new MethodTrampoline(
+ 1,
+ (Parser target, arg0) => target._expect(arg0)),
+ 'expectGt_0': new MethodTrampoline(0, (Parser target) => target._expectGt()),
+ 'expectKeyword_1': new MethodTrampoline(
+ 1,
+ (Parser target, arg0) => target._expectKeyword(arg0)),
+ 'expectSemicolon_0': new MethodTrampoline(
+ 0,
+ (Parser target) => target._expectSemicolon()),
+ 'findRange_2': new MethodTrampoline(
+ 2,
+ (Parser target, arg0, arg1) => target._findRange(arg0, arg1)),
+ 'getCodeBlockRanges_1': new MethodTrampoline(
+ 1,
+ (Parser target, arg0) => target._getCodeBlockRanges(arg0)),
+ 'getEndToken_1': new MethodTrampoline(
+ 1,
+ (Parser target, arg0) => target._getEndToken(arg0)),
+ 'injectToken_1': new MethodTrampoline(
+ 1,
+ (Parser target, arg0) => target._injectToken(arg0)),
+ 'isFunctionDeclaration_0': new MethodTrampoline(
+ 0,
+ (Parser target) => target._isFunctionDeclaration()),
+ 'isFunctionExpression_1': new MethodTrampoline(
+ 1,
+ (Parser target, arg0) => target._isFunctionExpression(arg0)),
+ 'isHexDigit_1': new MethodTrampoline(
+ 1,
+ (Parser target, arg0) => target._isHexDigit(arg0)),
+ 'isInitializedVariableDeclaration_0': new MethodTrampoline(
+ 0,
+ (Parser target) => target._isInitializedVariableDeclaration()),
+ 'isLinkText_2': new MethodTrampoline(
+ 2,
+ (Parser target, arg0, arg1) => target._isLinkText(arg0, arg1)),
+ 'isOperator_1': new MethodTrampoline(
+ 1,
+ (Parser target, arg0) => target._isOperator(arg0)),
+ 'isSwitchMember_0': new MethodTrampoline(
+ 0,
+ (Parser target) => target._isSwitchMember()),
+ 'isTypedIdentifier_1': new MethodTrampoline(
+ 1,
+ (Parser target, arg0) => target._isTypedIdentifier(arg0)),
+ 'lockErrorListener_0': new MethodTrampoline(
+ 0,
+ (Parser target) => target._lockErrorListener()),
+ 'matches_1': new MethodTrampoline(
+ 1,
+ (Parser target, arg0) => target._matches(arg0)),
+ 'matchesGt_0': new MethodTrampoline(
+ 0,
+ (Parser target) => target._matchesGt()),
+ 'matchesIdentifier_0': new MethodTrampoline(
+ 0,
+ (Parser target) => target._matchesIdentifier()),
+ 'matchesKeyword_1': new MethodTrampoline(
+ 1,
+ (Parser target, arg0) => target._matchesKeyword(arg0)),
+ 'matchesString_1': new MethodTrampoline(
+ 1,
+ (Parser target, arg0) => target._matchesString(arg0)),
+ 'optional_1': new MethodTrampoline(
+ 1,
+ (Parser target, arg0) => target._optional(arg0)),
+ 'parseAdditiveExpression_0': new MethodTrampoline(
+ 0,
+ (Parser target) => target._parseAdditiveExpression()),
+ 'parseAssertStatement_0': new MethodTrampoline(
+ 0,
+ (Parser target) => target._parseAssertStatement()),
+ 'parseAssignableExpression_1': new MethodTrampoline(
+ 1,
+ (Parser target, arg0) => target._parseAssignableExpression(arg0)),
+ 'parseAssignableSelector_2': new MethodTrampoline(
+ 2,
+ (Parser target, arg0, arg1) => target._parseAssignableSelector(arg0, arg1)),
+ 'parseAwaitExpression_0': new MethodTrampoline(
+ 0,
+ (Parser target) => target._parseAwaitExpression()),
+ 'parseBitwiseAndExpression_0': new MethodTrampoline(
+ 0,
+ (Parser target) => target._parseBitwiseAndExpression()),
+ 'parseBitwiseXorExpression_0': new MethodTrampoline(
+ 0,
+ (Parser target) => target._parseBitwiseXorExpression()),
+ 'parseBreakStatement_0': new MethodTrampoline(
+ 0,
+ (Parser target) => target._parseBreakStatement()),
+ 'parseCascadeSection_0': new MethodTrampoline(
+ 0,
+ (Parser target) => target._parseCascadeSection()),
+ 'parseClassDeclaration_2': new MethodTrampoline(
+ 2,
+ (Parser target, arg0, arg1) => target._parseClassDeclaration(arg0, arg1)),
+ 'parseClassMembers_2': new MethodTrampoline(
+ 2,
+ (Parser target, arg0, arg1) => target._parseClassMembers(arg0, arg1)),
+ 'parseClassTypeAlias_3': new MethodTrampoline(
+ 3,
+ (Parser target, arg0, arg1, arg2) =>
+ target._parseClassTypeAlias(arg0, arg1, arg2)),
+ 'parseCombinators_0': new MethodTrampoline(
+ 0,
+ (Parser target) => target._parseCombinators()),
+ 'parseCommentAndMetadata_0': new MethodTrampoline(
+ 0,
+ (Parser target) => target._parseCommentAndMetadata()),
+ 'parseCommentReference_2': new MethodTrampoline(
+ 2,
+ (Parser target, arg0, arg1) => target._parseCommentReference(arg0, arg1)),
+ 'parseCommentReferences_1': new MethodTrampoline(
+ 1,
+ (Parser target, arg0) => target._parseCommentReferences(arg0)),
+ 'parseCompilationUnitMember_1': new MethodTrampoline(
+ 1,
+ (Parser target, arg0) => target._parseCompilationUnitMember(arg0)),
+ 'parseConstExpression_0': new MethodTrampoline(
+ 0,
+ (Parser target) => target._parseConstExpression()),
+ 'parseConstructor_8': new MethodTrampoline(
+ 8,
+ (Parser target, arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7) =>
+ target._parseConstructor(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7)),
+ 'parseConstructorFieldInitializer_0': new MethodTrampoline(
+ 0,
+ (Parser target) => target._parseConstructorFieldInitializer()),
+ 'parseContinueStatement_0': new MethodTrampoline(
+ 0,
+ (Parser target) => target._parseContinueStatement()),
+ 'parseDirective_1': new MethodTrampoline(
+ 1,
+ (Parser target, arg0) => target._parseDirective(arg0)),
+ 'parseDirectives_0': new MethodTrampoline(
+ 0,
+ (Parser target) => target._parseDirectives()),
+ 'parseDocumentationComment_0': new MethodTrampoline(
+ 0,
+ (Parser target) => target._parseDocumentationComment()),
+ 'parseDoStatement_0': new MethodTrampoline(
+ 0,
+ (Parser target) => target._parseDoStatement()),
+ 'parseEmptyStatement_0': new MethodTrampoline(
+ 0,
+ (Parser target) => target._parseEmptyStatement()),
+ 'parseEnumConstantDeclaration_0': new MethodTrampoline(
+ 0,
+ (Parser target) => target._parseEnumConstantDeclaration()),
+ 'parseEnumDeclaration_1': new MethodTrampoline(
+ 1,
+ (Parser target, arg0) => target._parseEnumDeclaration(arg0)),
+ 'parseEqualityExpression_0': new MethodTrampoline(
+ 0,
+ (Parser target) => target._parseEqualityExpression()),
+ 'parseExportDirective_1': new MethodTrampoline(
+ 1,
+ (Parser target, arg0) => target._parseExportDirective(arg0)),
+ 'parseExpressionList_0': new MethodTrampoline(
+ 0,
+ (Parser target) => target._parseExpressionList()),
+ 'parseFinalConstVarOrType_1': new MethodTrampoline(
+ 1,
+ (Parser target, arg0) => target._parseFinalConstVarOrType(arg0)),
+ 'parseFormalParameter_1': new MethodTrampoline(
+ 1,
+ (Parser target, arg0) => target._parseFormalParameter(arg0)),
+ 'parseForStatement_0': new MethodTrampoline(
+ 0,
+ (Parser target) => target._parseForStatement()),
+ 'parseFunctionBody_3': new MethodTrampoline(
+ 3,
+ (Parser target, arg0, arg1, arg2) =>
+ target._parseFunctionBody(arg0, arg1, arg2)),
+ 'parseFunctionDeclaration_3': new MethodTrampoline(
+ 3,
+ (Parser target, arg0, arg1, arg2) =>
+ target._parseFunctionDeclaration(arg0, arg1, arg2)),
+ 'parseFunctionDeclarationStatement_0': new MethodTrampoline(
+ 0,
+ (Parser target) => target._parseFunctionDeclarationStatement()),
+ 'parseFunctionDeclarationStatementAfterReturnType_2': new MethodTrampoline(
+ 2,
+ (Parser target, arg0, arg1) =>
+ target._parseFunctionDeclarationStatementAfterReturnType(arg0, arg1)),
+ 'parseFunctionTypeAlias_2': new MethodTrampoline(
+ 2,
+ (Parser target, arg0, arg1) => target._parseFunctionTypeAlias(arg0, arg1)),
+ 'parseGetter_4': new MethodTrampoline(
+ 4,
+ (Parser target, arg0, arg1, arg2, arg3) =>
+ target._parseGetter(arg0, arg1, arg2, arg3)),
+ 'parseIdentifierList_0': new MethodTrampoline(
+ 0,
+ (Parser target) => target._parseIdentifierList()),
+ 'parseIfStatement_0': new MethodTrampoline(
+ 0,
+ (Parser target) => target._parseIfStatement()),
+ 'parseImportDirective_1': new MethodTrampoline(
+ 1,
+ (Parser target, arg0) => target._parseImportDirective(arg0)),
+ 'parseInitializedIdentifierList_4': new MethodTrampoline(
+ 4,
+ (Parser target, arg0, arg1, arg2, arg3) =>
+ target._parseInitializedIdentifierList(arg0, arg1, arg2, arg3)),
+ 'parseInstanceCreationExpression_1': new MethodTrampoline(
+ 1,
+ (Parser target, arg0) => target._parseInstanceCreationExpression(arg0)),
+ 'parseLibraryDirective_1': new MethodTrampoline(
+ 1,
+ (Parser target, arg0) => target._parseLibraryDirective(arg0)),
+ 'parseLibraryName_2': new MethodTrampoline(
+ 2,
+ (Parser target, arg0, arg1) => target._parseLibraryName(arg0, arg1)),
+ 'parseListLiteral_2': new MethodTrampoline(
+ 2,
+ (Parser target, arg0, arg1) => target._parseListLiteral(arg0, arg1)),
+ 'parseListOrMapLiteral_1': new MethodTrampoline(
+ 1,
+ (Parser target, arg0) => target._parseListOrMapLiteral(arg0)),
+ 'parseLogicalAndExpression_0': new MethodTrampoline(
+ 0,
+ (Parser target) => target._parseLogicalAndExpression()),
+ 'parseMapLiteral_2': new MethodTrampoline(
+ 2,
+ (Parser target, arg0, arg1) => target._parseMapLiteral(arg0, arg1)),
+ 'parseMethodDeclarationAfterParameters_6': new MethodTrampoline(
+ 6,
+ (Parser target, arg0, arg1, arg2, arg3, arg4, arg5) =>
+ target._parseMethodDeclarationAfterParameters(
+ arg0,
+ arg1,
+ arg2,
+ arg3,
+ arg4,
+ arg5)),
+ 'parseMethodDeclarationAfterReturnType_4': new MethodTrampoline(
+ 4,
+ (Parser target, arg0, arg1, arg2, arg3) =>
+ target._parseMethodDeclarationAfterReturnType(arg0, arg1, arg2, arg3)),
+ 'parseModifiers_0': new MethodTrampoline(
+ 0,
+ (Parser target) => target._parseModifiers()),
+ 'parseMultiplicativeExpression_0': new MethodTrampoline(
+ 0,
+ (Parser target) => target._parseMultiplicativeExpression()),
+ 'parseNativeClause_0': new MethodTrampoline(
+ 0,
+ (Parser target) => target._parseNativeClause()),
+ 'parseNewExpression_0': new MethodTrampoline(
+ 0,
+ (Parser target) => target._parseNewExpression()),
+ 'parseNonLabeledStatement_0': new MethodTrampoline(
+ 0,
+ (Parser target) => target._parseNonLabeledStatement()),
+ 'parseOperator_3': new MethodTrampoline(
+ 3,
+ (Parser target, arg0, arg1, arg2) => target._parseOperator(arg0, arg1, arg2)),
+ 'parseOptionalReturnType_0': new MethodTrampoline(
+ 0,
+ (Parser target) => target._parseOptionalReturnType()),
+ 'parsePartDirective_1': new MethodTrampoline(
+ 1,
+ (Parser target, arg0) => target._parsePartDirective(arg0)),
+ 'parsePostfixExpression_0': new MethodTrampoline(
+ 0,
+ (Parser target) => target._parsePostfixExpression()),
+ 'parsePrimaryExpression_0': new MethodTrampoline(
+ 0,
+ (Parser target) => target._parsePrimaryExpression()),
+ 'parseRedirectingConstructorInvocation_0': new MethodTrampoline(
+ 0,
+ (Parser target) => target._parseRedirectingConstructorInvocation()),
+ 'parseRelationalExpression_0': new MethodTrampoline(
+ 0,
+ (Parser target) => target._parseRelationalExpression()),
+ 'parseRethrowExpression_0': new MethodTrampoline(
+ 0,
+ (Parser target) => target._parseRethrowExpression()),
+ 'parseReturnStatement_0': new MethodTrampoline(
+ 0,
+ (Parser target) => target._parseReturnStatement()),
+ 'parseSetter_4': new MethodTrampoline(
+ 4,
+ (Parser target, arg0, arg1, arg2, arg3) =>
+ target._parseSetter(arg0, arg1, arg2, arg3)),
+ 'parseShiftExpression_0': new MethodTrampoline(
+ 0,
+ (Parser target) => target._parseShiftExpression()),
+ 'parseStatementList_0': new MethodTrampoline(
+ 0,
+ (Parser target) => target._parseStatementList()),
+ 'parseStringInterpolation_1': new MethodTrampoline(
+ 1,
+ (Parser target, arg0) => target._parseStringInterpolation(arg0)),
+ 'parseSuperConstructorInvocation_0': new MethodTrampoline(
+ 0,
+ (Parser target) => target._parseSuperConstructorInvocation()),
+ 'parseSwitchStatement_0': new MethodTrampoline(
+ 0,
+ (Parser target) => target._parseSwitchStatement()),
+ 'parseSymbolLiteral_0': new MethodTrampoline(
+ 0,
+ (Parser target) => target._parseSymbolLiteral()),
+ 'parseThrowExpression_0': new MethodTrampoline(
+ 0,
+ (Parser target) => target._parseThrowExpression()),
+ 'parseThrowExpressionWithoutCascade_0': new MethodTrampoline(
+ 0,
+ (Parser target) => target._parseThrowExpressionWithoutCascade()),
+ 'parseTryStatement_0': new MethodTrampoline(
+ 0,
+ (Parser target) => target._parseTryStatement()),
+ 'parseTypeAlias_1': new MethodTrampoline(
+ 1,
+ (Parser target, arg0) => target._parseTypeAlias(arg0)),
+ 'parseUnaryExpression_0': new MethodTrampoline(
+ 0,
+ (Parser target) => target._parseUnaryExpression()),
+ 'parseVariableDeclaration_0': new MethodTrampoline(
+ 0,
+ (Parser target) => target._parseVariableDeclaration()),
+ 'parseVariableDeclarationListAfterMetadata_1': new MethodTrampoline(
+ 1,
+ (Parser target, arg0) =>
+ target._parseVariableDeclarationListAfterMetadata(arg0)),
+ 'parseVariableDeclarationListAfterType_3': new MethodTrampoline(
+ 3,
+ (Parser target, arg0, arg1, arg2) =>
+ target._parseVariableDeclarationListAfterType(arg0, arg1, arg2)),
+ 'parseVariableDeclarationStatementAfterMetadata_1': new MethodTrampoline(
+ 1,
+ (Parser target, arg0) =>
+ target._parseVariableDeclarationStatementAfterMetadata(arg0)),
+ 'parseVariableDeclarationStatementAfterType_3': new MethodTrampoline(
+ 3,
+ (Parser target, arg0, arg1, arg2) =>
+ target._parseVariableDeclarationStatementAfterType(arg0, arg1, arg2)),
+ 'parseWhileStatement_0': new MethodTrampoline(
+ 0,
+ (Parser target) => target._parseWhileStatement()),
+ 'parseYieldStatement_0': new MethodTrampoline(
+ 0,
+ (Parser target) => target._parseYieldStatement()),
+ 'peek_0': new MethodTrampoline(0, (Parser target) => target._peek()),
+ 'peekAt_1': new MethodTrampoline(
+ 1,
+ (Parser target, arg0) => target._peekAt(arg0)),
+ 'reportError_1': new MethodTrampoline(
+ 1,
+ (Parser target, arg0) => target._reportError(arg0)),
+ 'reportErrorForCurrentToken_2': new MethodTrampoline(
+ 2,
+ (Parser target, arg0, arg1) => target._reportErrorForCurrentToken(arg0, arg1)),
+ 'reportErrorForNode_3': new MethodTrampoline(
+ 3,
+ (Parser target, arg0, arg1, arg2) =>
+ target._reportErrorForNode(arg0, arg1, arg2)),
+ 'reportErrorForToken_3': new MethodTrampoline(
+ 3,
+ (Parser target, arg0, arg1, arg2) =>
+ target._reportErrorForToken(arg0, arg1, arg2)),
+ 'skipBlock_0': new MethodTrampoline(
+ 0,
+ (Parser target) => target._skipBlock()),
+ 'skipFinalConstVarOrType_1': new MethodTrampoline(
+ 1,
+ (Parser target, arg0) => target._skipFinalConstVarOrType(arg0)),
+ 'skipFormalParameterList_1': new MethodTrampoline(
+ 1,
+ (Parser target, arg0) => target._skipFormalParameterList(arg0)),
+ 'skipPastMatchingToken_1': new MethodTrampoline(
+ 1,
+ (Parser target, arg0) => target._skipPastMatchingToken(arg0)),
+ 'skipPrefixedIdentifier_1': new MethodTrampoline(
+ 1,
+ (Parser target, arg0) => target._skipPrefixedIdentifier(arg0)),
+ 'skipReturnType_1': new MethodTrampoline(
+ 1,
+ (Parser target, arg0) => target._skipReturnType(arg0)),
+ 'skipSimpleIdentifier_1': new MethodTrampoline(
+ 1,
+ (Parser target, arg0) => target._skipSimpleIdentifier(arg0)),
+ 'skipStringInterpolation_1': new MethodTrampoline(
+ 1,
+ (Parser target, arg0) => target._skipStringInterpolation(arg0)),
+ 'skipStringLiteral_1': new MethodTrampoline(
+ 1,
+ (Parser target, arg0) => target._skipStringLiteral(arg0)),
+ 'skipTypeArgumentList_1': new MethodTrampoline(
+ 1,
+ (Parser target, arg0) => target._skipTypeArgumentList(arg0)),
+ 'skipTypeName_1': new MethodTrampoline(
+ 1,
+ (Parser target, arg0) => target._skipTypeName(arg0)),
+ 'skipTypeParameterList_1': new MethodTrampoline(
+ 1,
+ (Parser target, arg0) => target._skipTypeParameterList(arg0)),
+ 'tokenMatches_2': new MethodTrampoline(
+ 2,
+ (Parser target, arg0, arg1) => target._tokenMatches(arg0, arg1)),
+ 'tokenMatchesIdentifier_1': new MethodTrampoline(
+ 1,
+ (Parser target, arg0) => target._tokenMatchesIdentifier(arg0)),
+ 'tokenMatchesKeyword_2': new MethodTrampoline(
+ 2,
+ (Parser target, arg0, arg1) => target._tokenMatchesKeyword(arg0, arg1)),
+ 'tokenMatchesString_2': new MethodTrampoline(
+ 2,
+ (Parser target, arg0, arg1) => target._tokenMatchesString(arg0, arg1)),
+ 'translateCharacter_3': new MethodTrampoline(
+ 3,
+ (Parser target, arg0, arg1, arg2) =>
+ target._translateCharacter(arg0, arg1, arg2)),
+ 'unlockErrorListener_0': new MethodTrampoline(
+ 0,
+ (Parser target) => target._unlockErrorListener()),
+ 'validateFormalParameterList_1': new MethodTrampoline(
+ 1,
+ (Parser target, arg0) => target._validateFormalParameterList(arg0)),
+ 'validateModifiersForClass_1': new MethodTrampoline(
+ 1,
+ (Parser target, arg0) => target._validateModifiersForClass(arg0)),
+ 'validateModifiersForConstructor_1': new MethodTrampoline(
+ 1,
+ (Parser target, arg0) => target._validateModifiersForConstructor(arg0)),
+ 'validateModifiersForEnum_1': new MethodTrampoline(
+ 1,
+ (Parser target, arg0) => target._validateModifiersForEnum(arg0)),
+ 'validateModifiersForField_1': new MethodTrampoline(
+ 1,
+ (Parser target, arg0) => target._validateModifiersForField(arg0)),
+ 'validateModifiersForFunctionDeclarationStatement_1': new MethodTrampoline(
+ 1,
+ (Parser target, arg0) =>
+ target._validateModifiersForFunctionDeclarationStatement(arg0)),
+ 'validateModifiersForGetterOrSetterOrMethod_1': new MethodTrampoline(
+ 1,
+ (Parser target, arg0) =>
+ target._validateModifiersForGetterOrSetterOrMethod(arg0)),
+ 'validateModifiersForOperator_1': new MethodTrampoline(
+ 1,
+ (Parser target, arg0) => target._validateModifiersForOperator(arg0)),
+ 'validateModifiersForTopLevelDeclaration_1': new MethodTrampoline(
+ 1,
+ (Parser target, arg0) => target._validateModifiersForTopLevelDeclaration(arg0)),
+ 'validateModifiersForTopLevelFunction_1': new MethodTrampoline(
+ 1,
+ (Parser target, arg0) => target._validateModifiersForTopLevelFunction(arg0)),
+ 'validateModifiersForTopLevelVariable_1': new MethodTrampoline(
+ 1,
+ (Parser target, arg0) => target._validateModifiersForTopLevelVariable(arg0)),
+ 'validateModifiersForTypedef_1': new MethodTrampoline(
+ 1,
+ (Parser target, arg0) => target._validateModifiersForTypedef(arg0)),
+};
+
+Object invokeParserMethodImpl(Parser parser, String methodName,
+ List<Object> objects, Token tokenStream) {
+ parser.currentToken = tokenStream;
+ MethodTrampoline method =
+ methodTable_Parser['${methodName}_${objects.length}'];
+ return method.invoke(parser, objects);
+}
/**
* Instances of the class `CommentAndMetadata` implement a simple data-holder for a method
@@ -144,10 +746,11 @@ class IncrementalParseDispatcher implements AstVisitor<AstNode> {
@override
AstNode visitAssignmentExpression(AssignmentExpression node) {
if (identical(_oldNode, node.leftHandSide)) {
- // TODO(brianwilkerson) If the assignment is part of a cascade section, then we don't have a
- // single parse method that will work. Otherwise, we can parse a conditional expression, but
- // need to ensure that the resulting expression is assignable.
- // return parser.parseConditionalExpression();
+ // TODO(brianwilkerson) If the assignment is part of a cascade section,
+ // then we don't have a single parse method that will work.
+ // Otherwise, we can parse a conditional expression, but need to ensure
+ // that the resulting expression is assignable.
+// return parser.parseConditionalExpression();
throw new InsufficientContextException();
} else if (identical(_oldNode, node.rightHandSide)) {
if (_isCascadeAllowedInAssignment(node)) {
@@ -161,7 +764,8 @@ class IncrementalParseDispatcher implements AstVisitor<AstNode> {
@override
AstNode visitAwaitExpression(AwaitExpression node) {
if (identical(_oldNode, node.expression)) {
- // TODO(brianwilkerson) Depending on precedence, this might not be sufficient.
+ // TODO(brianwilkerson) Depending on precedence,
+ // this might not be sufficient.
return _parser.parseExpression2();
}
return _notAChild(node);
@@ -898,7 +1502,8 @@ class IncrementalParseDispatcher implements AstVisitor<AstNode> {
}
@override
- AstNode visitRedirectingConstructorInvocation(RedirectingConstructorInvocation node) {
+ AstNode
+ visitRedirectingConstructorInvocation(RedirectingConstructorInvocation node) {
if (identical(_oldNode, node.constructorName)) {
return _parser.parseSimpleIdentifier();
} else if (identical(_oldNode, node.argumentList)) {
@@ -947,7 +1552,8 @@ class IncrementalParseDispatcher implements AstVisitor<AstNode> {
AstNode visitSimpleIdentifier(SimpleIdentifier node) => _notAChild(node);
@override
- AstNode visitSimpleStringLiteral(SimpleStringLiteral node) => _notAChild(node);
+ AstNode visitSimpleStringLiteral(SimpleStringLiteral node) =>
+ _notAChild(node);
@override
AstNode visitStringInterpolation(StringInterpolation node) {
@@ -1173,7 +1779,8 @@ class IncrementalParseDispatcher implements AstVisitor<AstNode> {
* @param visitedNode the visited node that should have been the parent of the node to be replaced
*/
AstNode _notAChild(AstNode visitedNode) {
- throw new IncrementalParseException.con1("Internal error: the visited node (a ${visitedNode.runtimeType}) was not the parent of the node to be replaced (a ${_oldNode.runtimeType})");
+ throw new IncrementalParseException.con1(
+ "Internal error: the visited node (a ${visitedNode.runtimeType}) was not the parent of the node to be replaced (a ${_oldNode.runtimeType})");
}
}
@@ -1257,7 +1864,8 @@ class IncrementalParser {
* @param originalStart the offset in the original source of the first character that was modified
* @param originalEnd the offset in the original source of the last character that was modified
*/
- AstNode reparse(AstNode originalStructure, Token leftToken, Token rightToken, int originalStart, int originalEnd) {
+ AstNode reparse(AstNode originalStructure, Token leftToken, Token rightToken,
+ int originalStart, int originalEnd) {
AstNode oldNode = null;
AstNode newNode = null;
//
@@ -1265,16 +1873,21 @@ class IncrementalParser {
//
Token firstToken = leftToken.next;
if (identical(firstToken, rightToken)) {
- // If there are no new tokens, then we need to include at least one copied node in the range.
+ // If there are no new tokens, then we need to include at least one copied
+ // node in the range.
firstToken = leftToken;
}
//
- // Find the smallest AST node that encompasses the range of re-scanned tokens.
+ // Find the smallest AST node that encompasses the range of re-scanned
+ // tokens.
//
if (originalEnd < originalStart) {
- oldNode = new NodeLocator.con1(originalStart).searchWithin(originalStructure);
+ oldNode =
+ new NodeLocator.con1(originalStart).searchWithin(originalStructure);
} else {
- oldNode = new NodeLocator.con2(originalStart, originalEnd).searchWithin(originalStructure);
+ oldNode = new NodeLocator.con2(
+ originalStart,
+ originalEnd).searchWithin(originalStructure);
}
//
// Find the token at which parsing is to begin.
@@ -1298,13 +1911,16 @@ class IncrementalParser {
}
bool advanceToParent = false;
try {
- IncrementalParseDispatcher dispatcher = new IncrementalParseDispatcher(parser, oldNode);
+ IncrementalParseDispatcher dispatcher =
+ new IncrementalParseDispatcher(parser, oldNode);
newNode = parent.accept(dispatcher);
//
// Validate that the new node can replace the old node.
//
Token mappedToken = _tokenMap.get(oldNode.endToken.next);
- if (mappedToken == null || mappedToken.offset != newNode.endToken.next.offset || newNode.offset != oldNode.offset) {
+ if (mappedToken == null ||
+ mappedToken.offset != newNode.endToken.next.offset ||
+ newNode.offset != oldNode.offset) {
advanceToParent = true;
}
} on InsufficientContextException catch (exception) {
@@ -1322,15 +1938,18 @@ class IncrementalParser {
}
_updatedNode = newNode;
//
- // Replace the old node with the new node in a copy of the original AST structure.
+ // Replace the old node with the new node in a copy of the original AST
+ // structure.
//
if (identical(oldNode, originalStructure)) {
- // We ended up re-parsing the whole structure, so there's no need for a copy.
+ // We ended up re-parsing the whole structure, so there's no need for a
+ // copy.
ResolutionCopier.copyResolutionData(oldNode, newNode);
return newNode;
}
ResolutionCopier.copyResolutionData(oldNode, newNode);
- IncrementalAstCloner cloner = new IncrementalAstCloner(oldNode, newNode, _tokenMap);
+ IncrementalAstCloner cloner =
+ new IncrementalAstCloner(oldNode, newNode, _tokenMap);
return originalStructure.accept(cloner) as AstNode;
}
@@ -1390,6 +2009,40 @@ class InsufficientContextException extends IncrementalParseException {
}
/**
+ * Wrapper around [Function] which should be called with "target" and "arguments".
+ */
+class MethodTrampoline {
+ int parameterCount;
+ Function trampoline;
+ MethodTrampoline(this.parameterCount, this.trampoline);
+ Object invoke(target, List arguments) {
+ if (arguments.length != parameterCount) {
+ throw new IllegalArgumentException(
+ "${arguments.length} != $parameterCount");
+ }
+ switch (parameterCount) {
+ case 0:
+ return trampoline(target);
+ case 1:
+ return trampoline(target, arguments[0]);
+ case 2:
+ return trampoline(target, arguments[0], arguments[1]);
+ case 3:
+ return trampoline(target, arguments[0], arguments[1], arguments[2]);
+ case 4:
+ return trampoline(
+ target,
+ arguments[0],
+ arguments[1],
+ arguments[2],
+ arguments[3]);
+ default:
+ throw new IllegalArgumentException("Not implemented for > 4 arguments");
+ }
+ }
+}
+
+/**
* Instances of the class `Modifiers` implement a simple data-holder for a method that needs
* to return multiple values.
*/
@@ -1467,6 +2120,24 @@ class Modifiers {
* Instances of the class `Parser` are used to parse tokens into an AST structure.
*/
class Parser {
+ static String ASYNC = "async";
+
+ static String _AWAIT = "await";
+
+ static String _HIDE = "hide";
+
+ static String _OF = "of";
+
+ static String _ON = "on";
+
+ static String _NATIVE = "native";
+
+ static String _SHOW = "show";
+
+ static String SYNC = "sync";
+
+ static String _YIELD = "yield";
+
/**
* The source being parsed.
*/
@@ -1495,7 +2166,8 @@ class Parser {
/**
* A flag indicating whether the parser is to parse deferred libraries.
*/
- bool _parseDeferredLibraries = AnalysisOptionsImpl.DEFAULT_ENABLE_DEFERRED_LOADING;
+ bool _parseDeferredLibraries =
+ AnalysisOptionsImpl.DEFAULT_ENABLE_DEFERRED_LOADING;
/**
* A flag indicating whether the parser is to parse enum declarations.
@@ -1533,24 +2205,6 @@ class Parser {
*/
bool _inInitializer = false;
- static String ASYNC = "async";
-
- static String _AWAIT = "await";
-
- static String _HIDE = "hide";
-
- static String _OF = "of";
-
- static String _ON = "on";
-
- static String _NATIVE = "native";
-
- static String _SHOW = "show";
-
- static String SYNC = "sync";
-
- static String _YIELD = "yield";
-
/**
* Initialize a newly created parser.
*
@@ -1561,93 +2215,35 @@ class Parser {
Parser(this._source, this._errorListener);
/**
- * Parse a compilation unit, starting with the given token.
- *
- * @param token the first token of the compilation unit
- * @return the compilation unit that was parsed
- */
- CompilationUnit parseCompilationUnit(Token token) {
- InstrumentationBuilder instrumentation = Instrumentation.builder2("dart.engine.Parser.parseCompilationUnit");
- try {
- _currentToken = token;
- return parseCompilationUnit2();
- } finally {
- instrumentation.log2(2);
- //Record if >= 2ms
- }
- }
-
- /**
- * Parse the script tag and directives in a compilation unit, starting with the given token, until
- * the first non-directive is encountered. The remainder of the compilation unit will not be
- * parsed. Specifically, if there are directives later in the file, they will not be parsed.
- *
- * @param token the first token of the compilation unit
- * @return the compilation unit that was parsed
- */
- CompilationUnit parseDirectives(Token token) {
- InstrumentationBuilder instrumentation = Instrumentation.builder2("dart.engine.Parser.parseDirectives");
- try {
- _currentToken = token;
- return _parseDirectives();
- } finally {
- instrumentation.log2(2);
- //Record if >= 2ms
- }
- }
-
- /**
- * Parse an expression, starting with the given token.
+ * Advance to the next token in the token stream, making it the new current token.
*
- * @param token the first token of the expression
- * @return the expression that was parsed, or `null` if the tokens do not represent a
- * recognizable expression
+ * @return the token that was current before this method was invoked
*/
- Expression parseExpression(Token token) {
- InstrumentationBuilder instrumentation = Instrumentation.builder2("dart.engine.Parser.parseExpression");
- try {
- _currentToken = token;
- return parseExpression2();
- } finally {
- instrumentation.log2(2);
- //Record if >= 2ms
- }
+ Token get andAdvance {
+ Token token = _currentToken;
+ _advance();
+ return token;
}
- /**
- * Parse a statement, starting with the given token.
- *
- * @param token the first token of the statement
- * @return the statement that was parsed, or `null` if the tokens do not represent a
- * recognizable statement
- */
- Statement parseStatement(Token token) {
- InstrumentationBuilder instrumentation = Instrumentation.builder2("dart.engine.Parser.parseStatement");
- try {
- _currentToken = token;
- return parseStatement2();
- } finally {
- instrumentation.log2(2);
- //Record if >= 2ms
- }
+ void set currentToken(Token currentToken) {
+ this._currentToken = currentToken;
}
/**
- * Parse a sequence of statements, starting with the given token.
+ * Return `true` if the current token is the first token of a return type that is followed
+ * by an identifier, possibly followed by a list of type parameters, followed by a
+ * left-parenthesis. This is used by parseTypeAlias to determine whether or not to parse a return
+ * type.
*
- * @param token the first token of the sequence of statement
- * @return the statements that were parsed, or `null` if the tokens do not represent a
- * recognizable sequence of statements
+ * @return `true` if we can successfully parse the rest of a type alias if we first parse a
+ * return type.
*/
- List<Statement> parseStatements(Token token) {
- InstrumentationBuilder instrumentation = Instrumentation.builder2("dart.engine.Parser.parseStatements");
- try {
- _currentToken = token;
- return _parseStatementList();
- } finally {
- instrumentation.log2(2);
- //Record if >= 2ms
+ bool get hasReturnTypeInTypeAlias {
+ Token next = _skipReturnType(_currentToken);
+ if (next == null) {
+ return false;
}
+ return _tokenMatchesIdentifier(next);
}
/**
@@ -1728,8 +2324,8 @@ class Parser {
*/
Expression parseArgument() {
//
- // Both namedArgument and expression can start with an identifier, but only namedArgument can
- // have an identifier followed by a colon.
+ // Both namedArgument and expression can start with an identifier, but only
+ // namedArgument can have an identifier followed by a colon.
//
if (_matchesIdentifier() && _tokenMatches(_peek(), TokenType.COLON)) {
return new NamedExpression(parseLabel(), parseExpression2());
@@ -1759,8 +2355,8 @@ class Parser {
return new ArgumentList(leftParenthesis, arguments, andAdvance);
}
//
- // Even though unnamed arguments must all appear before any named arguments, we allow them to
- // appear in any order so that we can recover faster.
+ // Even though unnamed arguments must all appear before any named arguments,
+ // we allow them to appear in any order so that we can recover faster.
//
bool wasInInitializer = _inInitializer;
_inInitializer = false;
@@ -1773,19 +2369,24 @@ class Parser {
argument = parseArgument();
arguments.add(argument);
if (foundNamedArgument) {
- bool blankArgument = argument is SimpleIdentifier && (argument as SimpleIdentifier).name.isEmpty;
- if (!generatedError && !(argument is NamedExpression && !blankArgument)) {
- // Report the error, once, but allow the arguments to be in any order in the AST.
- _reportErrorForCurrentToken(ParserErrorCode.POSITIONAL_AFTER_NAMED_ARGUMENT);
+ bool blankArgument =
+ argument is SimpleIdentifier &&
+ (argument as SimpleIdentifier).name.isEmpty;
+ if (!generatedError &&
+ !(argument is NamedExpression && !blankArgument)) {
+ // Report the error, once, but allow the arguments to be in any
+ // order in the AST.
+ _reportErrorForCurrentToken(
+ ParserErrorCode.POSITIONAL_AFTER_NAMED_ARGUMENT);
generatedError = true;
}
} else if (argument is NamedExpression) {
foundNamedArgument = true;
}
}
- // TODO(brianwilkerson) Recovery: Look at the left parenthesis to see whether there is a
- // matching right parenthesis. If there is, then we're more likely missing a comma and should
- // go back to parsing arguments.
+ // TODO(brianwilkerson) Recovery: Look at the left parenthesis to see
+ // whether there is a matching right parenthesis. If there is, then we're
+ // more likely missing a comma and should go back to parsing arguments.
Token rightParenthesis = _expect(TokenType.CLOSE_PAREN);
return new ArgumentList(leftParenthesis, arguments, rightParenthesis);
} finally {
@@ -1806,14 +2407,16 @@ class Parser {
*/
Expression parseBitwiseOrExpression() {
Expression expression;
- if (_matchesKeyword(Keyword.SUPER) && _tokenMatches(_peek(), TokenType.BAR)) {
+ if (_matchesKeyword(Keyword.SUPER) &&
+ _tokenMatches(_peek(), TokenType.BAR)) {
expression = new SuperExpression(andAdvance);
} else {
expression = _parseBitwiseXorExpression();
}
while (_matches(TokenType.BAR)) {
Token operator = andAdvance;
- expression = new BinaryExpression(expression, operator, _parseBitwiseXorExpression());
+ expression =
+ new BinaryExpression(expression, operator, _parseBitwiseXorExpression());
}
return expression;
}
@@ -1832,14 +2435,18 @@ class Parser {
Token leftBracket = _expect(TokenType.OPEN_CURLY_BRACKET);
List<Statement> statements = new List<Statement>();
Token statementStart = _currentToken;
- while (!_matches(TokenType.EOF) && !_matches(TokenType.CLOSE_CURLY_BRACKET)) {
+ while (!_matches(TokenType.EOF) &&
+ !_matches(TokenType.CLOSE_CURLY_BRACKET)) {
Statement statement = parseStatement2();
if (statement != null) {
statements.add(statement);
}
if (identical(_currentToken, statementStart)) {
// Ensure that we are making progress and report an error if we're not.
- _reportErrorForToken(ParserErrorCode.UNEXPECTED_TOKEN, _currentToken, [_currentToken.lexeme]);
+ _reportErrorForToken(
+ ParserErrorCode.UNEXPECTED_TOKEN,
+ _currentToken,
+ [_currentToken.lexeme]);
_advance();
}
statementStart = _currentToken;
@@ -1868,58 +2475,101 @@ class Parser {
TypeName returnType = parseReturnType();
if (_matchesKeyword(Keyword.GET) && _tokenMatchesIdentifier(_peek())) {
_validateModifiersForGetterOrSetterOrMethod(modifiers);
- return _parseGetter(commentAndMetadata, modifiers.externalKeyword, modifiers.staticKeyword, returnType);
- } else if (_matchesKeyword(Keyword.SET) && _tokenMatchesIdentifier(_peek())) {
+ return _parseGetter(
+ commentAndMetadata,
+ modifiers.externalKeyword,
+ modifiers.staticKeyword,
+ returnType);
+ } else if (_matchesKeyword(Keyword.SET) &&
+ _tokenMatchesIdentifier(_peek())) {
_validateModifiersForGetterOrSetterOrMethod(modifiers);
- return _parseSetter(commentAndMetadata, modifiers.externalKeyword, modifiers.staticKeyword, returnType);
+ return _parseSetter(
+ commentAndMetadata,
+ modifiers.externalKeyword,
+ modifiers.staticKeyword,
+ returnType);
} else if (_matchesKeyword(Keyword.OPERATOR) && _isOperator(_peek())) {
_validateModifiersForOperator(modifiers);
- return _parseOperator(commentAndMetadata, modifiers.externalKeyword, returnType);
- } else if (_matchesIdentifier() && _peek().matchesAny([
- TokenType.OPEN_PAREN,
- TokenType.OPEN_CURLY_BRACKET,
- TokenType.FUNCTION])) {
+ return _parseOperator(
+ commentAndMetadata,
+ modifiers.externalKeyword,
+ returnType);
+ } else if (_matchesIdentifier() &&
+ _peek().matchesAny(
+ [TokenType.OPEN_PAREN, TokenType.OPEN_CURLY_BRACKET, TokenType.FUNCTION])) {
_validateModifiersForGetterOrSetterOrMethod(modifiers);
- return _parseMethodDeclarationAfterReturnType(commentAndMetadata, modifiers.externalKeyword, modifiers.staticKeyword, returnType);
+ return _parseMethodDeclarationAfterReturnType(
+ commentAndMetadata,
+ modifiers.externalKeyword,
+ modifiers.staticKeyword,
+ returnType);
} else {
//
// We have found an error of some kind. Try to recover.
//
if (_matchesIdentifier()) {
- if (_peek().matchesAny([TokenType.EQ, TokenType.COMMA, TokenType.SEMICOLON])) {
+ if (_peek().matchesAny(
+ [TokenType.EQ, TokenType.COMMA, TokenType.SEMICOLON])) {
//
// We appear to have a variable declaration with a type of "void".
//
_reportErrorForNode(ParserErrorCode.VOID_VARIABLE, returnType);
- return _parseInitializedIdentifierList(commentAndMetadata, modifiers.staticKeyword, _validateModifiersForField(modifiers), returnType);
+ return _parseInitializedIdentifierList(
+ commentAndMetadata,
+ modifiers.staticKeyword,
+ _validateModifiersForField(modifiers),
+ returnType);
}
}
if (_isOperator(_currentToken)) {
//
- // We appear to have found an operator declaration without the 'operator' keyword.
+ // We appear to have found an operator declaration without the
+ // 'operator' keyword.
//
_validateModifiersForOperator(modifiers);
- return _parseOperator(commentAndMetadata, modifiers.externalKeyword, returnType);
+ return _parseOperator(
+ commentAndMetadata,
+ modifiers.externalKeyword,
+ returnType);
}
- _reportErrorForToken(ParserErrorCode.EXPECTED_EXECUTABLE, _currentToken);
+ _reportErrorForToken(
+ ParserErrorCode.EXPECTED_EXECUTABLE,
+ _currentToken);
return null;
}
- } else if (_matchesKeyword(Keyword.GET) && _tokenMatchesIdentifier(_peek())) {
+ } else if (_matchesKeyword(Keyword.GET) &&
+ _tokenMatchesIdentifier(_peek())) {
_validateModifiersForGetterOrSetterOrMethod(modifiers);
- return _parseGetter(commentAndMetadata, modifiers.externalKeyword, modifiers.staticKeyword, null);
- } else if (_matchesKeyword(Keyword.SET) && _tokenMatchesIdentifier(_peek())) {
+ return _parseGetter(
+ commentAndMetadata,
+ modifiers.externalKeyword,
+ modifiers.staticKeyword,
+ null);
+ } else if (_matchesKeyword(Keyword.SET) &&
+ _tokenMatchesIdentifier(_peek())) {
_validateModifiersForGetterOrSetterOrMethod(modifiers);
- return _parseSetter(commentAndMetadata, modifiers.externalKeyword, modifiers.staticKeyword, null);
+ return _parseSetter(
+ commentAndMetadata,
+ modifiers.externalKeyword,
+ modifiers.staticKeyword,
+ null);
} else if (_matchesKeyword(Keyword.OPERATOR) && _isOperator(_peek())) {
_validateModifiersForOperator(modifiers);
- return _parseOperator(commentAndMetadata, modifiers.externalKeyword, null);
+ return _parseOperator(
+ commentAndMetadata,
+ modifiers.externalKeyword,
+ null);
} else if (!_matchesIdentifier()) {
if (_isOperator(_currentToken)) {
//
- // We appear to have found an operator declaration without the 'operator' keyword.
+ // We appear to have found an operator declaration without the
+ // 'operator' keyword.
//
_validateModifiersForOperator(modifiers);
- return _parseOperator(commentAndMetadata, modifiers.externalKeyword, null);
+ return _parseOperator(
+ commentAndMetadata,
+ modifiers.externalKeyword,
+ null);
}
Token keyword = modifiers.varKeyword;
if (keyword == null) {
@@ -1934,71 +2584,151 @@ class Parser {
//
_reportErrorForCurrentToken(ParserErrorCode.MISSING_IDENTIFIER);
List<VariableDeclaration> variables = new List<VariableDeclaration>();
- variables.add(new VariableDeclaration(null, null, _createSyntheticIdentifier(), null, null));
- return new FieldDeclaration(commentAndMetadata.comment, commentAndMetadata.metadata, null, new VariableDeclarationList(null, null, keyword, null, variables), _expectSemicolon());
- }
- _reportErrorForToken(ParserErrorCode.EXPECTED_CLASS_MEMBER, _currentToken);
- if (commentAndMetadata.comment != null || !commentAndMetadata.metadata.isEmpty) {
+ variables.add(
+ new VariableDeclaration(null, null, _createSyntheticIdentifier(), null, null));
+ return new FieldDeclaration(
+ commentAndMetadata.comment,
+ commentAndMetadata.metadata,
+ null,
+ new VariableDeclarationList(null, null, keyword, null, variables),
+ _expectSemicolon());
+ }
+ _reportErrorForToken(
+ ParserErrorCode.EXPECTED_CLASS_MEMBER,
+ _currentToken);
+ if (commentAndMetadata.comment != null ||
+ !commentAndMetadata.metadata.isEmpty) {
//
- // We appear to have found an incomplete declaration at the end of the class. At this point
- // it consists of a metadata, which we don't want to loose, so we'll treat it as a method
- // declaration with a missing name, parameters and empty body.
+ // We appear to have found an incomplete declaration at the end of the
+ // class. At this point it consists of a metadata, which we don't want
+ // to loose, so we'll treat it as a method declaration with a missing
+ // name, parameters and empty body.
//
- return new MethodDeclaration(commentAndMetadata.comment, commentAndMetadata.metadata, null, null, null, null, null, _createSyntheticIdentifier(), new FormalParameterList(null, new List<FormalParameter>(), null, null, null), new EmptyFunctionBody(_createSyntheticToken(TokenType.SEMICOLON)));
+ return new MethodDeclaration(
+ commentAndMetadata.comment,
+ commentAndMetadata.metadata,
+ null,
+ null,
+ null,
+ null,
+ null,
+ _createSyntheticIdentifier(),
+ new FormalParameterList(null, new List<FormalParameter>(), null, null, null),
+ new EmptyFunctionBody(_createSyntheticToken(TokenType.SEMICOLON)));
}
return null;
- } else if (_tokenMatches(_peek(), TokenType.PERIOD) && _tokenMatchesIdentifier(_peekAt(2)) && _tokenMatches(_peekAt(3), TokenType.OPEN_PAREN)) {
- return _parseConstructor(commentAndMetadata, modifiers.externalKeyword, _validateModifiersForConstructor(modifiers), modifiers.factoryKeyword, parseSimpleIdentifier(), andAdvance, parseSimpleIdentifier(), parseFormalParameterList());
+ } else if (_tokenMatches(_peek(), TokenType.PERIOD) &&
+ _tokenMatchesIdentifier(_peekAt(2)) &&
+ _tokenMatches(_peekAt(3), TokenType.OPEN_PAREN)) {
+ return _parseConstructor(
+ commentAndMetadata,
+ modifiers.externalKeyword,
+ _validateModifiersForConstructor(modifiers),
+ modifiers.factoryKeyword,
+ parseSimpleIdentifier(),
+ andAdvance,
+ parseSimpleIdentifier(),
+ parseFormalParameterList());
} else if (_tokenMatches(_peek(), TokenType.OPEN_PAREN)) {
SimpleIdentifier methodName = parseSimpleIdentifier();
FormalParameterList parameters = parseFormalParameterList();
- if (_matches(TokenType.COLON) || modifiers.factoryKeyword != null || methodName.name == className) {
- return _parseConstructor(commentAndMetadata, modifiers.externalKeyword, _validateModifiersForConstructor(modifiers), modifiers.factoryKeyword, methodName, null, null, parameters);
+ if (_matches(TokenType.COLON) ||
+ modifiers.factoryKeyword != null ||
+ methodName.name == className) {
+ return _parseConstructor(
+ commentAndMetadata,
+ modifiers.externalKeyword,
+ _validateModifiersForConstructor(modifiers),
+ modifiers.factoryKeyword,
+ methodName,
+ null,
+ null,
+ parameters);
}
_validateModifiersForGetterOrSetterOrMethod(modifiers);
_validateFormalParameterList(parameters);
- return _parseMethodDeclarationAfterParameters(commentAndMetadata, modifiers.externalKeyword, modifiers.staticKeyword, null, methodName, parameters);
- } else if (_peek().matchesAny([TokenType.EQ, TokenType.COMMA, TokenType.SEMICOLON])) {
- if (modifiers.constKeyword == null && modifiers.finalKeyword == null && modifiers.varKeyword == null) {
- _reportErrorForCurrentToken(ParserErrorCode.MISSING_CONST_FINAL_VAR_OR_TYPE);
- }
- return _parseInitializedIdentifierList(commentAndMetadata, modifiers.staticKeyword, _validateModifiersForField(modifiers), null);
+ return _parseMethodDeclarationAfterParameters(
+ commentAndMetadata,
+ modifiers.externalKeyword,
+ modifiers.staticKeyword,
+ null,
+ methodName,
+ parameters);
+ } else if (_peek().matchesAny(
+ [TokenType.EQ, TokenType.COMMA, TokenType.SEMICOLON])) {
+ if (modifiers.constKeyword == null &&
+ modifiers.finalKeyword == null &&
+ modifiers.varKeyword == null) {
+ _reportErrorForCurrentToken(
+ ParserErrorCode.MISSING_CONST_FINAL_VAR_OR_TYPE);
+ }
+ return _parseInitializedIdentifierList(
+ commentAndMetadata,
+ modifiers.staticKeyword,
+ _validateModifiersForField(modifiers),
+ null);
}
TypeName type = parseTypeName();
if (_matchesKeyword(Keyword.GET) && _tokenMatchesIdentifier(_peek())) {
_validateModifiersForGetterOrSetterOrMethod(modifiers);
- return _parseGetter(commentAndMetadata, modifiers.externalKeyword, modifiers.staticKeyword, type);
- } else if (_matchesKeyword(Keyword.SET) && _tokenMatchesIdentifier(_peek())) {
+ return _parseGetter(
+ commentAndMetadata,
+ modifiers.externalKeyword,
+ modifiers.staticKeyword,
+ type);
+ } else if (_matchesKeyword(Keyword.SET) &&
+ _tokenMatchesIdentifier(_peek())) {
_validateModifiersForGetterOrSetterOrMethod(modifiers);
- return _parseSetter(commentAndMetadata, modifiers.externalKeyword, modifiers.staticKeyword, type);
+ return _parseSetter(
+ commentAndMetadata,
+ modifiers.externalKeyword,
+ modifiers.staticKeyword,
+ type);
} else if (_matchesKeyword(Keyword.OPERATOR) && _isOperator(_peek())) {
_validateModifiersForOperator(modifiers);
- return _parseOperator(commentAndMetadata, modifiers.externalKeyword, type);
+ return _parseOperator(
+ commentAndMetadata,
+ modifiers.externalKeyword,
+ type);
} else if (!_matchesIdentifier()) {
if (_matches(TokenType.CLOSE_CURLY_BRACKET)) {
//
- // We appear to have found an incomplete declaration at the end of the class. At this point
- // it consists of a type name, so we'll treat it as a field declaration with a missing
- // field name and semicolon.
+ // We appear to have found an incomplete declaration at the end of the
+ // class. At this point it consists of a type name, so we'll treat it as
+ // a field declaration with a missing field name and semicolon.
//
- return _parseInitializedIdentifierList(commentAndMetadata, modifiers.staticKeyword, _validateModifiersForField(modifiers), type);
+ return _parseInitializedIdentifierList(
+ commentAndMetadata,
+ modifiers.staticKeyword,
+ _validateModifiersForField(modifiers),
+ type);
}
if (_isOperator(_currentToken)) {
//
- // We appear to have found an operator declaration without the 'operator' keyword.
+ // We appear to have found an operator declaration without the
+ // 'operator' keyword.
//
_validateModifiersForOperator(modifiers);
- return _parseOperator(commentAndMetadata, modifiers.externalKeyword, type);
+ return _parseOperator(
+ commentAndMetadata,
+ modifiers.externalKeyword,
+ type);
}
//
- // We appear to have found an incomplete declaration before another declaration.
- // At this point it consists of a type name, so we'll treat it as a field declaration
- // with a missing field name and semicolon.
+ // We appear to have found an incomplete declaration before another
+ // declaration. At this point it consists of a type name, so we'll treat
+ // it as a field declaration with a missing field name and semicolon.
//
- _reportErrorForToken(ParserErrorCode.EXPECTED_CLASS_MEMBER, _currentToken);
+ _reportErrorForToken(
+ ParserErrorCode.EXPECTED_CLASS_MEMBER,
+ _currentToken);
try {
_lockErrorListener();
- return _parseInitializedIdentifierList(commentAndMetadata, modifiers.staticKeyword, _validateModifiersForField(modifiers), type);
+ return _parseInitializedIdentifierList(
+ commentAndMetadata,
+ modifiers.staticKeyword,
+ _validateModifiersForField(modifiers),
+ type);
} finally {
_unlockErrorListener();
}
@@ -2007,20 +2737,61 @@ class Parser {
FormalParameterList parameters = parseFormalParameterList();
if (methodName.name == className) {
_reportErrorForNode(ParserErrorCode.CONSTRUCTOR_WITH_RETURN_TYPE, type);
- return _parseConstructor(commentAndMetadata, modifiers.externalKeyword, _validateModifiersForConstructor(modifiers), modifiers.factoryKeyword, methodName, null, null, parameters);
+ return _parseConstructor(
+ commentAndMetadata,
+ modifiers.externalKeyword,
+ _validateModifiersForConstructor(modifiers),
+ modifiers.factoryKeyword,
+ methodName,
+ null,
+ null,
+ parameters);
}
_validateModifiersForGetterOrSetterOrMethod(modifiers);
_validateFormalParameterList(parameters);
- return _parseMethodDeclarationAfterParameters(commentAndMetadata, modifiers.externalKeyword, modifiers.staticKeyword, type, methodName, parameters);
+ return _parseMethodDeclarationAfterParameters(
+ commentAndMetadata,
+ modifiers.externalKeyword,
+ modifiers.staticKeyword,
+ type,
+ methodName,
+ parameters);
} else if (_tokenMatches(_peek(), TokenType.OPEN_CURLY_BRACKET)) {
- // We have found "TypeName identifier {", and are guessing that this is a getter without the
- // keyword 'get'.
+ // We have found "TypeName identifier {", and are guessing that this is a
+ // getter without the keyword 'get'.
_validateModifiersForGetterOrSetterOrMethod(modifiers);
_reportErrorForCurrentToken(ParserErrorCode.MISSING_GET);
- _currentToken = _injectToken(new Parser_SyntheticKeywordToken(Keyword.GET, _currentToken.offset));
- return _parseGetter(commentAndMetadata, modifiers.externalKeyword, modifiers.staticKeyword, type);
+ _currentToken = _injectToken(
+ new Parser_SyntheticKeywordToken(Keyword.GET, _currentToken.offset));
+ return _parseGetter(
+ commentAndMetadata,
+ modifiers.externalKeyword,
+ modifiers.staticKeyword,
+ type);
+ }
+ return _parseInitializedIdentifierList(
+ commentAndMetadata,
+ modifiers.staticKeyword,
+ _validateModifiersForField(modifiers),
+ type);
+ }
+
+ /**
+ * Parse a compilation unit, starting with the given token.
+ *
+ * @param token the first token of the compilation unit
+ * @return the compilation unit that was parsed
+ */
+ CompilationUnit parseCompilationUnit(Token token) {
+ InstrumentationBuilder instrumentation =
+ Instrumentation.builder2("dart.engine.Parser.parseCompilationUnit");
+ try {
+ _currentToken = token;
+ return parseCompilationUnit2();
+ } finally {
+ instrumentation.log2(2);
+ //Record if >= 2ms
}
- return _parseInitializedIdentifierList(commentAndMetadata, modifiers.staticKeyword, _validateModifiersForField(modifiers), type);
}
/**
@@ -2052,30 +2823,42 @@ class Parser {
scriptTag = new ScriptTag(andAdvance);
}
//
- // Even though all directives must appear before declarations and must occur in a given order,
- // we allow directives and declarations to occur in any order so that we can recover better.
+ // Even though all directives must appear before declarations and must occur
+ // in a given order, we allow directives and declarations to occur in any
+ // order so that we can recover better.
//
bool libraryDirectiveFound = false;
bool partOfDirectiveFound = false;
bool partDirectiveFound = false;
bool directiveFoundAfterDeclaration = false;
List<Directive> directives = new List<Directive>();
- List<CompilationUnitMember> declarations = new List<CompilationUnitMember>();
+ List<CompilationUnitMember> declarations =
+ new List<CompilationUnitMember>();
Token memberStart = _currentToken;
while (!_matches(TokenType.EOF)) {
CommentAndMetadata commentAndMetadata = _parseCommentAndMetadata();
- if ((_matchesKeyword(Keyword.IMPORT) || _matchesKeyword(Keyword.EXPORT) || _matchesKeyword(Keyword.LIBRARY) || _matchesKeyword(Keyword.PART)) && !_tokenMatches(_peek(), TokenType.PERIOD) && !_tokenMatches(_peek(), TokenType.LT) && !_tokenMatches(_peek(), TokenType.OPEN_PAREN)) {
+ if ((_matchesKeyword(Keyword.IMPORT) ||
+ _matchesKeyword(Keyword.EXPORT) ||
+ _matchesKeyword(Keyword.LIBRARY) ||
+ _matchesKeyword(Keyword.PART)) &&
+ !_tokenMatches(_peek(), TokenType.PERIOD) &&
+ !_tokenMatches(_peek(), TokenType.LT) &&
+ !_tokenMatches(_peek(), TokenType.OPEN_PAREN)) {
Directive directive = _parseDirective(commentAndMetadata);
if (declarations.length > 0 && !directiveFoundAfterDeclaration) {
- _reportErrorForCurrentToken(ParserErrorCode.DIRECTIVE_AFTER_DECLARATION);
+ _reportErrorForCurrentToken(
+ ParserErrorCode.DIRECTIVE_AFTER_DECLARATION);
directiveFoundAfterDeclaration = true;
}
if (directive is LibraryDirective) {
if (libraryDirectiveFound) {
- _reportErrorForCurrentToken(ParserErrorCode.MULTIPLE_LIBRARY_DIRECTIVES);
+ _reportErrorForCurrentToken(
+ ParserErrorCode.MULTIPLE_LIBRARY_DIRECTIVES);
} else {
if (directives.length > 0) {
- _reportErrorForToken(ParserErrorCode.LIBRARY_DIRECTIVE_NOT_FIRST, directive.libraryToken);
+ _reportErrorForToken(
+ ParserErrorCode.LIBRARY_DIRECTIVE_NOT_FIRST,
+ directive.libraryToken);
}
libraryDirectiveFound = true;
}
@@ -2083,46 +2866,68 @@ class Parser {
partDirectiveFound = true;
} else if (partDirectiveFound) {
if (directive is ExportDirective) {
- _reportErrorForToken(ParserErrorCode.EXPORT_DIRECTIVE_AFTER_PART_DIRECTIVE, directive.keyword);
+ _reportErrorForToken(
+ ParserErrorCode.EXPORT_DIRECTIVE_AFTER_PART_DIRECTIVE,
+ directive.keyword);
} else if (directive is ImportDirective) {
- _reportErrorForToken(ParserErrorCode.IMPORT_DIRECTIVE_AFTER_PART_DIRECTIVE, directive.keyword);
+ _reportErrorForToken(
+ ParserErrorCode.IMPORT_DIRECTIVE_AFTER_PART_DIRECTIVE,
+ directive.keyword);
}
}
if (directive is PartOfDirective) {
if (partOfDirectiveFound) {
- _reportErrorForCurrentToken(ParserErrorCode.MULTIPLE_PART_OF_DIRECTIVES);
+ _reportErrorForCurrentToken(
+ ParserErrorCode.MULTIPLE_PART_OF_DIRECTIVES);
} else {
int directiveCount = directives.length;
for (int i = 0; i < directiveCount; i++) {
- _reportErrorForToken(ParserErrorCode.NON_PART_OF_DIRECTIVE_IN_PART, directives[i].keyword);
+ _reportErrorForToken(
+ ParserErrorCode.NON_PART_OF_DIRECTIVE_IN_PART,
+ directives[i].keyword);
}
partOfDirectiveFound = true;
}
} else {
if (partOfDirectiveFound) {
- _reportErrorForToken(ParserErrorCode.NON_PART_OF_DIRECTIVE_IN_PART, directive.keyword);
+ _reportErrorForToken(
+ ParserErrorCode.NON_PART_OF_DIRECTIVE_IN_PART,
+ directive.keyword);
}
}
directives.add(directive);
} else if (_matches(TokenType.SEMICOLON)) {
- _reportErrorForToken(ParserErrorCode.UNEXPECTED_TOKEN, _currentToken, [_currentToken.lexeme]);
+ _reportErrorForToken(
+ ParserErrorCode.UNEXPECTED_TOKEN,
+ _currentToken,
+ [_currentToken.lexeme]);
_advance();
} else {
- CompilationUnitMember member = _parseCompilationUnitMember(commentAndMetadata);
+ CompilationUnitMember member =
+ _parseCompilationUnitMember(commentAndMetadata);
if (member != null) {
declarations.add(member);
}
}
if (identical(_currentToken, memberStart)) {
- _reportErrorForToken(ParserErrorCode.UNEXPECTED_TOKEN, _currentToken, [_currentToken.lexeme]);
+ _reportErrorForToken(
+ ParserErrorCode.UNEXPECTED_TOKEN,
+ _currentToken,
+ [_currentToken.lexeme]);
_advance();
- while (!_matches(TokenType.EOF) && !_couldBeStartOfCompilationUnitMember()) {
+ while (!_matches(TokenType.EOF) &&
+ !_couldBeStartOfCompilationUnitMember()) {
_advance();
}
}
memberStart = _currentToken;
}
- return new CompilationUnit(firstToken, scriptTag, directives, declarations, _currentToken);
+ return new CompilationUnit(
+ firstToken,
+ scriptTag,
+ directives,
+ declarations,
+ _currentToken);
}
/**
@@ -2144,7 +2949,12 @@ class Parser {
Expression thenExpression = parseExpressionWithoutCascade();
Token colon = _expect(TokenType.COLON);
Expression elseExpression = parseExpressionWithoutCascade();
- return new ConditionalExpression(condition, question, thenExpression, colon, elseExpression);
+ return new ConditionalExpression(
+ condition,
+ question,
+ thenExpression,
+ colon,
+ elseExpression);
}
/**
@@ -2169,6 +2979,45 @@ class Parser {
}
/**
+ * Parse the script tag and directives in a compilation unit, starting with the given token, until
+ * the first non-directive is encountered. The remainder of the compilation unit will not be
+ * parsed. Specifically, if there are directives later in the file, they will not be parsed.
+ *
+ * @param token the first token of the compilation unit
+ * @return the compilation unit that was parsed
+ */
+ CompilationUnit parseDirectives(Token token) {
+ InstrumentationBuilder instrumentation =
+ Instrumentation.builder2("dart.engine.Parser.parseDirectives");
+ try {
+ _currentToken = token;
+ return _parseDirectives();
+ } finally {
+ instrumentation.log2(2);
+ //Record if >= 2ms
+ }
+ }
+
+ /**
+ * Parse an expression, starting with the given token.
+ *
+ * @param token the first token of the expression
+ * @return the expression that was parsed, or `null` if the tokens do not represent a
+ * recognizable expression
+ */
+ Expression parseExpression(Token token) {
+ InstrumentationBuilder instrumentation =
+ Instrumentation.builder2("dart.engine.Parser.parseExpression");
+ try {
+ _currentToken = token;
+ return parseExpression2();
+ } finally {
+ instrumentation.log2(2);
+ //Record if >= 2ms
+ }
+ }
+
+ /**
* Parse an expression that might contain a cascade.
*
* <pre>
@@ -2188,9 +3037,10 @@ class Parser {
return _parseRethrowExpression();
}
//
- // assignableExpression is a subset of conditionalExpression, so we can parse a conditional
- // expression and then determine whether it is followed by an assignmentOperator, checking for
- // conformance to the restricted grammar after making that determination.
+ // assignableExpression is a subset of conditionalExpression, so we can
+ // parse a conditional expression and then determine whether it is followed
+ // by an assignmentOperator, checking for conformance to the restricted
+ // grammar after making that determination.
//
Expression expression = parseConditionalExpression();
TokenType tokenType = _currentToken.type;
@@ -2231,15 +3081,19 @@ class Parser {
return _parseRethrowExpression();
}
//
- // assignableExpression is a subset of conditionalExpression, so we can parse a conditional
- // expression and then determine whether it is followed by an assignmentOperator, checking for
- // conformance to the restricted grammar after making that determination.
+ // assignableExpression is a subset of conditionalExpression, so we can
+ // parse a conditional expression and then determine whether it is followed
+ // by an assignmentOperator, checking for conformance to the restricted
+ // grammar after making that determination.
//
Expression expression = parseConditionalExpression();
if (_currentToken.type.isAssignmentOperator) {
Token operator = andAdvance;
_ensureAssignable(expression);
- expression = new AssignmentExpression(expression, operator, parseExpressionWithoutCascade());
+ expression = new AssignmentExpression(
+ expression,
+ operator,
+ parseExpressionWithoutCascade());
}
return expression;
}
@@ -2288,7 +3142,12 @@ class Parser {
FormalParameterList parseFormalParameterList() {
Token leftParenthesis = _expect(TokenType.OPEN_PAREN);
if (_matches(TokenType.CLOSE_PAREN)) {
- return new FormalParameterList(leftParenthesis, null, null, null, andAdvance);
+ return new FormalParameterList(
+ leftParenthesis,
+ null,
+ null,
+ null,
+ andAdvance);
}
//
// Even though it is invalid to have default parameters outside of brackets,
@@ -2316,11 +3175,16 @@ class Parser {
if (firstParameter) {
firstParameter = false;
} else if (!_optional(TokenType.COMMA)) {
- // TODO(brianwilkerson) The token is wrong, we need to recover from this case.
+ // TODO(brianwilkerson) The token is wrong, we need to recover from this
+ // case.
if (_getEndToken(leftParenthesis) != null) {
- _reportErrorForCurrentToken(ParserErrorCode.EXPECTED_TOKEN, [TokenType.COMMA.lexeme]);
+ _reportErrorForCurrentToken(
+ ParserErrorCode.EXPECTED_TOKEN,
+ [TokenType.COMMA.lexeme]);
} else {
- _reportErrorForToken(ParserErrorCode.MISSING_CLOSING_PARENTHESIS, _currentToken.previous);
+ _reportErrorForToken(
+ ParserErrorCode.MISSING_CLOSING_PARENTHESIS,
+ _currentToken.previous);
break;
}
}
@@ -2331,7 +3195,8 @@ class Parser {
if (_matches(TokenType.OPEN_SQUARE_BRACKET)) {
wasOptionalParameter = true;
if (leftSquareBracket != null && !reportedMuliplePositionalGroups) {
- _reportErrorForCurrentToken(ParserErrorCode.MULTIPLE_POSITIONAL_PARAMETER_GROUPS);
+ _reportErrorForCurrentToken(
+ ParserErrorCode.MULTIPLE_POSITIONAL_PARAMETER_GROUPS);
reportedMuliplePositionalGroups = true;
}
if (leftCurlyBracket != null && !reportedMixedGroups) {
@@ -2344,7 +3209,8 @@ class Parser {
} else if (_matches(TokenType.OPEN_CURLY_BRACKET)) {
wasOptionalParameter = true;
if (leftCurlyBracket != null && !reportedMulipleNamedGroups) {
- _reportErrorForCurrentToken(ParserErrorCode.MULTIPLE_NAMED_PARAMETER_GROUPS);
+ _reportErrorForCurrentToken(
+ ParserErrorCode.MULTIPLE_NAMED_PARAMETER_GROUPS);
reportedMulipleNamedGroups = true;
}
if (leftSquareBracket != null && !reportedMixedGroups) {
@@ -2362,22 +3228,29 @@ class Parser {
parameters.add(parameter);
currentParameters.add(parameter);
if (kind == ParameterKind.REQUIRED && wasOptionalParameter) {
- _reportErrorForNode(ParserErrorCode.NORMAL_BEFORE_OPTIONAL_PARAMETERS, parameter);
+ _reportErrorForNode(
+ ParserErrorCode.NORMAL_BEFORE_OPTIONAL_PARAMETERS,
+ parameter);
}
//
// Handle the end of parameter groups.
//
- // TODO(brianwilkerson) Improve the detection and reporting of missing and mismatched delimiters.
+ // TODO(brianwilkerson) Improve the detection and reporting of missing and
+ // mismatched delimiters.
if (_matches(TokenType.CLOSE_SQUARE_BRACKET)) {
rightSquareBracket = andAdvance;
currentParameters = normalParameters;
if (leftSquareBracket == null) {
if (leftCurlyBracket != null) {
- _reportErrorForCurrentToken(ParserErrorCode.WRONG_TERMINATOR_FOR_PARAMETER_GROUP, ["}"]);
+ _reportErrorForCurrentToken(
+ ParserErrorCode.WRONG_TERMINATOR_FOR_PARAMETER_GROUP,
+ ["}"]);
rightCurlyBracket = rightSquareBracket;
rightSquareBracket = null;
} else {
- _reportErrorForCurrentToken(ParserErrorCode.UNEXPECTED_TERMINATOR_FOR_PARAMETER_GROUP, ["["]);
+ _reportErrorForCurrentToken(
+ ParserErrorCode.UNEXPECTED_TERMINATOR_FOR_PARAMETER_GROUP,
+ ["["]);
}
}
kind = ParameterKind.REQUIRED;
@@ -2386,25 +3259,34 @@ class Parser {
currentParameters = normalParameters;
if (leftCurlyBracket == null) {
if (leftSquareBracket != null) {
- _reportErrorForCurrentToken(ParserErrorCode.WRONG_TERMINATOR_FOR_PARAMETER_GROUP, ["]"]);
+ _reportErrorForCurrentToken(
+ ParserErrorCode.WRONG_TERMINATOR_FOR_PARAMETER_GROUP,
+ ["]"]);
rightSquareBracket = rightCurlyBracket;
rightCurlyBracket = null;
} else {
- _reportErrorForCurrentToken(ParserErrorCode.UNEXPECTED_TERMINATOR_FOR_PARAMETER_GROUP, ["{"]);
+ _reportErrorForCurrentToken(
+ ParserErrorCode.UNEXPECTED_TERMINATOR_FOR_PARAMETER_GROUP,
+ ["{"]);
}
}
kind = ParameterKind.REQUIRED;
}
- } while (!_matches(TokenType.CLOSE_PAREN) && !identical(initialToken, _currentToken));
+ } while (!_matches(TokenType.CLOSE_PAREN) &&
+ !identical(initialToken, _currentToken));
Token rightParenthesis = _expect(TokenType.CLOSE_PAREN);
//
// Check that the groups were closed correctly.
//
if (leftSquareBracket != null && rightSquareBracket == null) {
- _reportErrorForCurrentToken(ParserErrorCode.MISSING_TERMINATOR_FOR_PARAMETER_GROUP, ["]"]);
+ _reportErrorForCurrentToken(
+ ParserErrorCode.MISSING_TERMINATOR_FOR_PARAMETER_GROUP,
+ ["]"]);
}
if (leftCurlyBracket != null && rightCurlyBracket == null) {
- _reportErrorForCurrentToken(ParserErrorCode.MISSING_TERMINATOR_FOR_PARAMETER_GROUP, ["}"]);
+ _reportErrorForCurrentToken(
+ ParserErrorCode.MISSING_TERMINATOR_FOR_PARAMETER_GROUP,
+ ["}"]);
}
//
// Build the parameter list.
@@ -2415,7 +3297,12 @@ class Parser {
if (rightSquareBracket == null) {
rightSquareBracket = rightCurlyBracket;
}
- return new FormalParameterList(leftParenthesis, parameters, leftSquareBracket, rightSquareBracket, rightParenthesis);
+ return new FormalParameterList(
+ leftParenthesis,
+ parameters,
+ leftSquareBracket,
+ rightSquareBracket,
+ rightParenthesis);
}
/**
@@ -2431,7 +3318,8 @@ class Parser {
FunctionExpression parseFunctionExpression() {
FormalParameterList parameters = parseFormalParameterList();
_validateFormalParameterList(parameters);
- FunctionBody body = _parseFunctionBody(false, ParserErrorCode.MISSING_FUNCTION_BODY, true);
+ FunctionBody body =
+ _parseFunctionBody(false, ParserErrorCode.MISSING_FUNCTION_BODY, true);
return new FunctionExpression(parameters, body);
}
@@ -2505,7 +3393,8 @@ class Parser {
Expression expression = _parseLogicalAndExpression();
while (_matches(TokenType.BAR_BAR)) {
Token operator = andAdvance;
- expression = new BinaryExpression(expression, operator, _parseLogicalAndExpression());
+ expression =
+ new BinaryExpression(expression, operator, _parseLogicalAndExpression());
}
return expression;
}
@@ -2562,25 +3451,56 @@ class Parser {
FormalParameterList parameters = parseFormalParameterList();
if (thisKeyword == null) {
if (holder.keyword != null) {
- _reportErrorForToken(ParserErrorCode.FUNCTION_TYPED_PARAMETER_VAR, holder.keyword);
+ _reportErrorForToken(
+ ParserErrorCode.FUNCTION_TYPED_PARAMETER_VAR,
+ holder.keyword);
}
- return new FunctionTypedFormalParameter(commentAndMetadata.comment, commentAndMetadata.metadata, holder.type, identifier, parameters);
+ return new FunctionTypedFormalParameter(
+ commentAndMetadata.comment,
+ commentAndMetadata.metadata,
+ holder.type,
+ identifier,
+ parameters);
} else {
- return new FieldFormalParameter(commentAndMetadata.comment, commentAndMetadata.metadata, holder.keyword, holder.type, thisKeyword, period, identifier, parameters);
+ return new FieldFormalParameter(
+ commentAndMetadata.comment,
+ commentAndMetadata.metadata,
+ holder.keyword,
+ holder.type,
+ thisKeyword,
+ period,
+ identifier,
+ parameters);
}
}
TypeName type = holder.type;
if (type != null) {
if (_tokenMatchesKeyword(type.name.beginToken, Keyword.VOID)) {
- _reportErrorForToken(ParserErrorCode.VOID_PARAMETER, type.name.beginToken);
- } else if (holder.keyword != null && _tokenMatchesKeyword(holder.keyword, Keyword.VAR)) {
+ _reportErrorForToken(
+ ParserErrorCode.VOID_PARAMETER,
+ type.name.beginToken);
+ } else if (holder.keyword != null &&
+ _tokenMatchesKeyword(holder.keyword, Keyword.VAR)) {
_reportErrorForToken(ParserErrorCode.VAR_AND_TYPE, holder.keyword);
}
}
if (thisKeyword != null) {
- return new FieldFormalParameter(commentAndMetadata.comment, commentAndMetadata.metadata, holder.keyword, holder.type, thisKeyword, period, identifier, null);
+ return new FieldFormalParameter(
+ commentAndMetadata.comment,
+ commentAndMetadata.metadata,
+ holder.keyword,
+ holder.type,
+ thisKeyword,
+ period,
+ identifier,
+ null);
}
- return new SimpleFormalParameter(commentAndMetadata.comment, commentAndMetadata.metadata, holder.keyword, holder.type, identifier);
+ return new SimpleFormalParameter(
+ commentAndMetadata.comment,
+ commentAndMetadata.metadata,
+ holder.keyword,
+ holder.type,
+ identifier);
}
/**
@@ -2641,6 +3561,25 @@ class Parser {
}
/**
+ * Parse a statement, starting with the given token.
+ *
+ * @param token the first token of the statement
+ * @return the statement that was parsed, or `null` if the tokens do not represent a
+ * recognizable statement
+ */
+ Statement parseStatement(Token token) {
+ InstrumentationBuilder instrumentation =
+ Instrumentation.builder2("dart.engine.Parser.parseStatement");
+ try {
+ _currentToken = token;
+ return parseStatement2();
+ } finally {
+ instrumentation.log2(2);
+ //Record if >= 2ms
+ }
+ }
+
+ /**
* Parse a statement.
*
* <pre>
@@ -2663,6 +3602,25 @@ class Parser {
}
/**
+ * Parse a sequence of statements, starting with the given token.
+ *
+ * @param token the first token of the sequence of statement
+ * @return the statements that were parsed, or `null` if the tokens do not represent a
+ * recognizable sequence of statements
+ */
+ List<Statement> parseStatements(Token token) {
+ InstrumentationBuilder instrumentation =
+ Instrumentation.builder2("dart.engine.Parser.parseStatements");
+ try {
+ _currentToken = token;
+ return _parseStatementList();
+ } finally {
+ instrumentation.log2(2);
+ //Record if >= 2ms
+ }
+ }
+
+ /**
* Parse a string literal.
*
* <pre>
@@ -2677,10 +3635,14 @@ class Parser {
List<StringLiteral> strings = new List<StringLiteral>();
while (_matches(TokenType.STRING)) {
Token string = andAdvance;
- if (_matches(TokenType.STRING_INTERPOLATION_EXPRESSION) || _matches(TokenType.STRING_INTERPOLATION_IDENTIFIER)) {
+ if (_matches(TokenType.STRING_INTERPOLATION_EXPRESSION) ||
+ _matches(TokenType.STRING_INTERPOLATION_IDENTIFIER)) {
strings.add(_parseStringInterpolation(string));
} else {
- strings.add(new SimpleStringLiteral(string, _computeStringValue(string.lexeme, true, true)));
+ strings.add(
+ new SimpleStringLiteral(
+ string,
+ _computeStringValue(string.lexeme, true, true)));
}
}
if (strings.length < 1) {
@@ -2761,9 +3723,19 @@ class Parser {
if (_matchesKeyword(Keyword.EXTENDS)) {
Token keyword = andAdvance;
TypeName bound = parseTypeName();
- return new TypeParameter(commentAndMetadata.comment, commentAndMetadata.metadata, name, keyword, bound);
+ return new TypeParameter(
+ commentAndMetadata.comment,
+ commentAndMetadata.metadata,
+ name,
+ keyword,
+ bound);
}
- return new TypeParameter(commentAndMetadata.comment, commentAndMetadata.metadata, name, null, null);
+ return new TypeParameter(
+ commentAndMetadata.comment,
+ commentAndMetadata.metadata,
+ name,
+ null,
+ null);
}
/**
@@ -2807,10 +3779,6 @@ class Parser {
return new WithClause(with2, types);
}
- void set currentToken(Token currentToken) {
- this._currentToken = currentToken;
- }
-
/**
* Advance to the next token in the token stream.
*/
@@ -2829,9 +3797,14 @@ class Parser {
* @param startIndex the index of the first character representing the scalar value
* @param endIndex the index of the last character representing the scalar value
*/
- void _appendScalarValue(StringBuffer buffer, String escapeSequence, int scalarValue, int startIndex, int endIndex) {
- if (scalarValue < 0 || scalarValue > Character.MAX_CODE_POINT || (scalarValue >= 0xD800 && scalarValue <= 0xDFFF)) {
- _reportErrorForCurrentToken(ParserErrorCode.INVALID_CODE_POINT, [escapeSequence]);
+ void _appendScalarValue(StringBuffer buffer, String escapeSequence,
+ int scalarValue, int startIndex, int endIndex) {
+ if (scalarValue < 0 ||
+ scalarValue > Character.MAX_CODE_POINT ||
+ (scalarValue >= 0xD800 && scalarValue <= 0xDFFF)) {
+ _reportErrorForCurrentToken(
+ ParserErrorCode.INVALID_CODE_POINT,
+ [escapeSequence]);
return;
}
if (scalarValue < Character.MAX_VALUE) {
@@ -2853,28 +3826,35 @@ class Parser {
bool isRaw = false;
int start = 0;
if (first) {
- if (StringUtilities.startsWith4(lexeme, 0, 0x72, 0x22, 0x22, 0x22) || StringUtilities.startsWith4(lexeme, 0, 0x72, 0x27, 0x27, 0x27)) {
+ if (StringUtilities.startsWith4(lexeme, 0, 0x72, 0x22, 0x22, 0x22) ||
+ StringUtilities.startsWith4(lexeme, 0, 0x72, 0x27, 0x27, 0x27)) {
isRaw = true;
start += 4;
- } else if (StringUtilities.startsWith2(lexeme, 0, 0x72, 0x22) || StringUtilities.startsWith2(lexeme, 0, 0x72, 0x27)) {
+ } else if (StringUtilities.startsWith2(lexeme, 0, 0x72, 0x22) ||
+ StringUtilities.startsWith2(lexeme, 0, 0x72, 0x27)) {
isRaw = true;
start += 2;
- } else if (StringUtilities.startsWith3(lexeme, 0, 0x22, 0x22, 0x22) || StringUtilities.startsWith3(lexeme, 0, 0x27, 0x27, 0x27)) {
+ } else if (StringUtilities.startsWith3(lexeme, 0, 0x22, 0x22, 0x22) ||
+ StringUtilities.startsWith3(lexeme, 0, 0x27, 0x27, 0x27)) {
start += 3;
- } else if (StringUtilities.startsWithChar(lexeme, 0x22) || StringUtilities.startsWithChar(lexeme, 0x27)) {
+ } else if (StringUtilities.startsWithChar(lexeme, 0x22) ||
+ StringUtilities.startsWithChar(lexeme, 0x27)) {
start += 1;
}
}
int end = lexeme.length;
if (last) {
- if (StringUtilities.endsWith3(lexeme, 0x22, 0x22, 0x22) || StringUtilities.endsWith3(lexeme, 0x27, 0x27, 0x27)) {
+ if (StringUtilities.endsWith3(lexeme, 0x22, 0x22, 0x22) ||
+ StringUtilities.endsWith3(lexeme, 0x27, 0x27, 0x27)) {
end -= 3;
- } else if (StringUtilities.endsWithChar(lexeme, 0x22) || StringUtilities.endsWithChar(lexeme, 0x27)) {
+ } else if (StringUtilities.endsWithChar(lexeme, 0x22) ||
+ StringUtilities.endsWithChar(lexeme, 0x27)) {
end -= 1;
}
}
if (end - start + 1 < 0) {
- AnalysisEngine.instance.logger.logError("Internal error: computeStringValue($lexeme, $first, $last)");
+ AnalysisEngine.instance.logger.logError(
+ "Internal error: computeStringValue($lexeme, $first, $last)");
return "";
}
if (isRaw) {
@@ -2895,7 +3875,15 @@ class Parser {
* @return the function declaration that most closely captures the components of the given method
* declaration
*/
- FunctionDeclaration _convertToFunctionDeclaration(MethodDeclaration method) => new FunctionDeclaration(method.documentationComment, method.metadata, method.externalKeyword, method.returnType, method.propertyKeyword, method.name, new FunctionExpression(method.parameters, method.body));
+ FunctionDeclaration _convertToFunctionDeclaration(MethodDeclaration method) =>
+ new FunctionDeclaration(
+ method.documentationComment,
+ method.metadata,
+ method.externalKeyword,
+ method.returnType,
+ method.propertyKeyword,
+ method.name,
+ new FunctionExpression(method.parameters, method.body));
/**
* Return `true` if the current token could be the start of a compilation unit member. This
@@ -2905,16 +3893,26 @@ class Parser {
* @return `true` if the current token could be the start of a compilation unit member
*/
bool _couldBeStartOfCompilationUnitMember() {
- if ((_matchesKeyword(Keyword.IMPORT) || _matchesKeyword(Keyword.EXPORT) || _matchesKeyword(Keyword.LIBRARY) || _matchesKeyword(Keyword.PART)) && !_tokenMatches(_peek(), TokenType.PERIOD) && !_tokenMatches(_peek(), TokenType.LT)) {
+ if ((_matchesKeyword(Keyword.IMPORT) ||
+ _matchesKeyword(Keyword.EXPORT) ||
+ _matchesKeyword(Keyword.LIBRARY) ||
+ _matchesKeyword(Keyword.PART)) &&
+ !_tokenMatches(_peek(), TokenType.PERIOD) &&
+ !_tokenMatches(_peek(), TokenType.LT)) {
// This looks like the start of a directive
return true;
} else if (_matchesKeyword(Keyword.CLASS)) {
// This looks like the start of a class definition
return true;
- } else if (_matchesKeyword(Keyword.TYPEDEF) && !_tokenMatches(_peek(), TokenType.PERIOD) && !_tokenMatches(_peek(), TokenType.LT)) {
+ } else if (_matchesKeyword(Keyword.TYPEDEF) &&
+ !_tokenMatches(_peek(), TokenType.PERIOD) &&
+ !_tokenMatches(_peek(), TokenType.LT)) {
// This looks like the start of a typedef
return true;
- } else if (_matchesKeyword(Keyword.VOID) || ((_matchesKeyword(Keyword.GET) || _matchesKeyword(Keyword.SET)) && _tokenMatchesIdentifier(_peek())) || (_matchesKeyword(Keyword.OPERATOR) && _isOperator(_peek()))) {
+ } else if (_matchesKeyword(Keyword.VOID) ||
+ ((_matchesKeyword(Keyword.GET) || _matchesKeyword(Keyword.SET)) &&
+ _tokenMatchesIdentifier(_peek())) ||
+ (_matchesKeyword(Keyword.OPERATOR) && _isOperator(_peek()))) {
// This looks like the start of a function
return true;
} else if (_matchesIdentifier()) {
@@ -2926,7 +3924,10 @@ class Parser {
if (token == null) {
return false;
}
- if (_matchesKeyword(Keyword.GET) || _matchesKeyword(Keyword.SET) || (_matchesKeyword(Keyword.OPERATOR) && _isOperator(_peek())) || _matchesIdentifier()) {
+ if (_matchesKeyword(Keyword.GET) ||
+ _matchesKeyword(Keyword.SET) ||
+ (_matchesKeyword(Keyword.OPERATOR) && _isOperator(_peek())) ||
+ _matchesIdentifier()) {
return true;
}
}
@@ -2942,10 +3943,15 @@ class Parser {
Token syntheticToken;
if (_currentToken.type == TokenType.KEYWORD) {
// Consider current keyword token as an identifier.
- // It is not always true, e.g. "^is T" where "^" is place the place for synthetic identifier.
- // By creating SyntheticStringToken we can distinguish a real identifier from synthetic.
- // In the code completion behavior will depend on a cursor position - before or on "is".
- syntheticToken = _injectToken(new SyntheticStringToken(TokenType.IDENTIFIER, _currentToken.lexeme, _currentToken.offset));
+ // It is not always true, e.g. "^is T" where "^" is place the place for
+ // synthetic identifier. By creating SyntheticStringToken we can
+ // distinguish a real identifier from synthetic. In the code completion
+ // behavior will depend on a cursor position - before or on "is".
+ syntheticToken = _injectToken(
+ new SyntheticStringToken(
+ TokenType.IDENTIFIER,
+ _currentToken.lexeme,
+ _currentToken.offset));
} else {
syntheticToken = _createSyntheticToken(TokenType.IDENTIFIER);
}
@@ -2957,21 +3963,24 @@ class Parser {
*
* @return the synthetic token that was created
*/
- Token _createSyntheticKeyword(Keyword keyword) => _injectToken(new Parser_SyntheticKeywordToken(keyword, _currentToken.offset));
+ Token _createSyntheticKeyword(Keyword keyword) =>
+ _injectToken(new Parser_SyntheticKeywordToken(keyword, _currentToken.offset));
/**
* Create a synthetic string literal.
*
* @return the synthetic string literal that was created
*/
- SimpleStringLiteral _createSyntheticStringLiteral() => new SimpleStringLiteral(_createSyntheticToken(TokenType.STRING), "");
+ SimpleStringLiteral _createSyntheticStringLiteral() =>
+ new SimpleStringLiteral(_createSyntheticToken(TokenType.STRING), "");
/**
* Create a synthetic token with the given type.
*
* @return the synthetic token that was created
*/
- Token _createSyntheticToken(TokenType type) => _injectToken(new StringToken(type, "", _currentToken.offset));
+ Token _createSyntheticToken(TokenType type) =>
+ _injectToken(new StringToken(type, "", _currentToken.offset));
/**
* Check that the given expression is assignable and report an error if it isn't.
@@ -2991,7 +4000,8 @@ class Parser {
*/
void _ensureAssignable(Expression expression) {
if (expression != null && !expression.isAssignable) {
- _reportErrorForCurrentToken(ParserErrorCode.ILLEGAL_ASSIGNMENT_TO_NON_ASSIGNABLE);
+ _reportErrorForCurrentToken(
+ ParserErrorCode.ILLEGAL_ASSIGNMENT_TO_NON_ASSIGNABLE);
}
}
@@ -3010,9 +4020,14 @@ class Parser {
// Remove uses of this method in favor of matches?
// Pass in the error code to use to report the error?
if (type == TokenType.SEMICOLON) {
- _reportErrorForToken(ParserErrorCode.EXPECTED_TOKEN, _currentToken.previous, [type.lexeme]);
+ _reportErrorForToken(
+ ParserErrorCode.EXPECTED_TOKEN,
+ _currentToken.previous,
+ [type.lexeme]);
} else {
- _reportErrorForCurrentToken(ParserErrorCode.EXPECTED_TOKEN, [type.lexeme]);
+ _reportErrorForCurrentToken(
+ ParserErrorCode.EXPECTED_TOKEN,
+ [type.lexeme]);
}
return _currentToken;
}
@@ -3027,7 +4042,9 @@ class Parser {
if (_matchesGt()) {
return andAdvance;
}
- _reportErrorForCurrentToken(ParserErrorCode.EXPECTED_TOKEN, [TokenType.GT.lexeme]);
+ _reportErrorForCurrentToken(
+ ParserErrorCode.EXPECTED_TOKEN,
+ [TokenType.GT.lexeme]);
return _currentToken;
}
@@ -3044,7 +4061,9 @@ class Parser {
}
// Remove uses of this method in favor of matches?
// Pass in the error code to use to report the error?
- _reportErrorForCurrentToken(ParserErrorCode.EXPECTED_TOKEN, [keyword.syntax]);
+ _reportErrorForCurrentToken(
+ ParserErrorCode.EXPECTED_TOKEN,
+ [keyword.syntax]);
return _currentToken;
}
@@ -3058,7 +4077,10 @@ class Parser {
if (_matches(TokenType.SEMICOLON)) {
return andAdvance;
} else {
- _reportErrorForToken(ParserErrorCode.EXPECTED_TOKEN, _currentToken.previous, [";"]);
+ _reportErrorForToken(
+ ParserErrorCode.EXPECTED_TOKEN,
+ _currentToken.previous,
+ [";"]);
return _createSyntheticToken(TokenType.SEMICOLON);
}
}
@@ -3080,19 +4102,8 @@ class Parser {
} else if (index < range[0]) {
return null;
}
- }
- return null;
- }
-
- /**
- * Advance to the next token in the token stream, making it the new current token.
- *
- * @return the token that was current before this method was invoked
- */
- Token get andAdvance {
- Token token = _currentToken;
- _advance();
- return token;
+ }
+ return null;
}
/**
@@ -3113,7 +4124,8 @@ class Parser {
if (firstChar == 0x2F) {
int secondChar = comment.codeUnitAt(1);
int thirdChar = comment.codeUnitAt(2);
- if ((secondChar == 0x2A && thirdChar == 0x2A) || (secondChar == 0x2F && thirdChar == 0x2F)) {
+ if ((secondChar == 0x2A && thirdChar == 0x2A) ||
+ (secondChar == 0x2F && thirdChar == 0x2F)) {
index = 3;
}
}
@@ -3121,23 +4133,36 @@ class Parser {
int currentChar = comment.codeUnitAt(index);
if (currentChar == 0xD || currentChar == 0xA) {
index = index + 1;
- while (index < length && Character.isWhitespace(comment.codeUnitAt(index))) {
+ while (index < length &&
+ Character.isWhitespace(comment.codeUnitAt(index))) {
index = index + 1;
}
- if (StringUtilities.startsWith6(comment, index, 0x2A, 0x20, 0x20, 0x20, 0x20, 0x20)) {
+ if (StringUtilities.startsWith6(
+ comment,
+ index,
+ 0x2A,
+ 0x20,
+ 0x20,
+ 0x20,
+ 0x20,
+ 0x20)) {
int end = index + 6;
- while (end < length && comment.codeUnitAt(end) != 0xD && comment.codeUnitAt(end) != 0xA) {
+ while (end < length &&
+ comment.codeUnitAt(end) != 0xD &&
+ comment.codeUnitAt(end) != 0xA) {
end = end + 1;
}
- ranges.add(<int> [index, end]);
+ ranges.add(<int>[index, end]);
index = end;
}
- } else if (index + 1 < length && currentChar == 0x5B && comment.codeUnitAt(index + 1) == 0x3A) {
+ } else if (index + 1 < length &&
+ currentChar == 0x5B &&
+ comment.codeUnitAt(index + 1) == 0x3A) {
int end = StringUtilities.indexOf2(comment, index + 2, 0x3A, 0x5D);
if (end < 0) {
end = length;
}
- ranges.add(<int> [index, end]);
+ ranges.add(<int>[index, end]);
index = end + 1;
} else {
index = index + 1;
@@ -3161,23 +4186,6 @@ class Parser {
}
/**
- * Return `true` if the current token is the first token of a return type that is followed
- * by an identifier, possibly followed by a list of type parameters, followed by a
- * left-parenthesis. This is used by parseTypeAlias to determine whether or not to parse a return
- * type.
- *
- * @return `true` if we can successfully parse the rest of a type alias if we first parse a
- * return type.
- */
- bool get hasReturnTypeInTypeAlias {
- Token next = _skipReturnType(_currentToken);
- if (next == null) {
- return false;
- }
- return _tokenMatchesIdentifier(next);
- }
-
- /**
* Inject the given token into the token stream immediately before the current token.
*
* @param token the token to be added to the token stream
@@ -3223,15 +4231,15 @@ class Parser {
if (afterName == null) {
return false;
}
- return _tokenMatches(afterName, TokenType.FUNCTION)
- || _tokenMatches(afterName, TokenType.OPEN_CURLY_BRACKET);
+ return _tokenMatches(afterName, TokenType.FUNCTION) ||
+ _tokenMatches(afterName, TokenType.OPEN_CURLY_BRACKET);
} else if (_tokenMatchesKeyword(afterReturnType, Keyword.GET)) {
Token afterName = _skipSimpleIdentifier(afterReturnType.next);
if (afterName == null) {
return false;
}
- return _tokenMatches(afterName, TokenType.FUNCTION)
- || _tokenMatches(afterName, TokenType.OPEN_CURLY_BRACKET);
+ return _tokenMatches(afterName, TokenType.FUNCTION) ||
+ _tokenMatches(afterName, TokenType.OPEN_CURLY_BRACKET);
}
return false;
}
@@ -3251,7 +4259,8 @@ class Parser {
if (afterParameters == null) {
return false;
}
- if (afterParameters.matchesAny([TokenType.OPEN_CURLY_BRACKET, TokenType.FUNCTION])) {
+ if (afterParameters.matchesAny(
+ [TokenType.OPEN_CURLY_BRACKET, TokenType.FUNCTION])) {
return true;
}
if (_parseAsync) {
@@ -3267,7 +4276,10 @@ class Parser {
* @param character the character being tested
* @return `true` if the character is a valid hexadecimal digit
*/
- bool _isHexDigit(int character) => (0x30 <= character && character <= 0x39) || (0x41 <= character && character <= 0x46) || (0x61 <= character && character <= 0x66);
+ bool _isHexDigit(int character) =>
+ (0x30 <= character && character <= 0x39) ||
+ (0x41 <= character && character <= 0x46) ||
+ (0x61 <= character && character <= 0x66);
/**
* Return `true` if the current token is the first token in an initialized variable
@@ -3299,19 +4311,22 @@ class Parser {
*/
bool _isInitializedVariableDeclaration() {
if (_matchesKeyword(Keyword.FINAL) || _matchesKeyword(Keyword.VAR)) {
- // An expression cannot start with a keyword other than 'const', 'rethrow', or 'throw'.
+ // An expression cannot start with a keyword other than 'const',
+ // 'rethrow', or 'throw'.
return true;
}
if (_matchesKeyword(Keyword.CONST)) {
- // Look to see whether we might be at the start of a list or map literal, otherwise this
- // should be the start of a variable declaration.
- return !_peek().matchesAny([
- TokenType.LT,
- TokenType.OPEN_CURLY_BRACKET,
- TokenType.OPEN_SQUARE_BRACKET,
- TokenType.INDEX]);
- }
- // We know that we have an identifier, and need to see whether it might be a type name.
+ // Look to see whether we might be at the start of a list or map literal,
+ // otherwise this should be the start of a variable declaration.
+ return !_peek().matchesAny(
+ [
+ TokenType.LT,
+ TokenType.OPEN_CURLY_BRACKET,
+ TokenType.OPEN_SQUARE_BRACKET,
+ TokenType.INDEX]);
+ }
+ // We know that we have an identifier, and need to see whether it might be
+ // a type name.
Token token = _skipTypeName(_currentToken);
if (token == null) {
// There was no type name, so this can't be a declaration.
@@ -3322,7 +4337,10 @@ class Parser {
return false;
}
TokenType type = token.type;
- return type == TokenType.EQ || type == TokenType.COMMA || type == TokenType.SEMICOLON || _tokenMatchesKeyword(token, Keyword.IN);
+ return type == TokenType.EQ ||
+ type == TokenType.COMMA ||
+ type == TokenType.SEMICOLON ||
+ _tokenMatchesKeyword(token, Keyword.IN);
}
/**
@@ -3388,7 +4406,8 @@ class Parser {
*/
bool _isSwitchMember() {
Token token = _currentToken;
- while (_tokenMatches(token, TokenType.IDENTIFIER) && _tokenMatches(token.next, TokenType.COLON)) {
+ while (_tokenMatches(token, TokenType.IDENTIFIER) &&
+ _tokenMatches(token.next, TokenType.COLON)) {
token = token.next.next;
}
if (token.type == TokenType.KEYWORD) {
@@ -3408,9 +4427,9 @@ class Parser {
return false;
} else if (_tokenMatchesIdentifier(token)) {
return true;
- } else if (_tokenMatchesKeyword(token, Keyword.THIS)
- && _tokenMatches(token.next, TokenType.PERIOD)
- && _tokenMatchesIdentifier(token.next.next)) {
+ } else if (_tokenMatchesKeyword(token, Keyword.THIS) &&
+ _tokenMatches(token.next, TokenType.PERIOD) &&
+ _tokenMatchesIdentifier(token.next.next)) {
return true;
} else if (_tokenMatchesKeyword(startToken, Keyword.VOID)) {
// The keyword 'void' isn't a valid identifier, so it should be assumed to
@@ -3501,7 +4520,8 @@ class Parser {
* @param keyword the keyword that can optionally appear in the current location
* @return `true` if the current token matches the given keyword
*/
- bool _matchesKeyword(Keyword keyword) => _tokenMatchesKeyword(_currentToken, keyword);
+ bool _matchesKeyword(Keyword keyword) =>
+ _tokenMatchesKeyword(_currentToken, keyword);
/**
* Return `true` if the current token matches the given identifier.
@@ -3509,7 +4529,9 @@ class Parser {
* @param identifier the identifier that can optionally appear in the current location
* @return `true` if the current token matches the given identifier
*/
- bool _matchesString(String identifier) => _currentToken.type == TokenType.IDENTIFIER && _currentToken.lexeme == identifier;
+ bool _matchesString(String identifier) =>
+ _currentToken.type == TokenType.IDENTIFIER &&
+ _currentToken.lexeme == identifier;
/**
* If the current token has the given type, then advance to the next token and return `true`
@@ -3540,14 +4562,16 @@ class Parser {
*/
Expression _parseAdditiveExpression() {
Expression expression;
- if (_matchesKeyword(Keyword.SUPER) && _currentToken.next.type.isAdditiveOperator) {
+ if (_matchesKeyword(Keyword.SUPER) &&
+ _currentToken.next.type.isAdditiveOperator) {
expression = new SuperExpression(andAdvance);
} else {
expression = _parseMultiplicativeExpression();
}
while (_currentToken.type.isAdditiveOperator) {
Token operator = andAdvance;
- expression = new BinaryExpression(expression, operator, _parseMultiplicativeExpression());
+ expression =
+ new BinaryExpression(expression, operator, _parseMultiplicativeExpression());
}
return expression;
}
@@ -3567,17 +4591,30 @@ class Parser {
Token leftParen = _expect(TokenType.OPEN_PAREN);
Expression expression = parseExpression2();
if (expression is AssignmentExpression) {
- _reportErrorForNode(ParserErrorCode.ASSERT_DOES_NOT_TAKE_ASSIGNMENT, expression);
+ _reportErrorForNode(
+ ParserErrorCode.ASSERT_DOES_NOT_TAKE_ASSIGNMENT,
+ expression);
} else if (expression is CascadeExpression) {
- _reportErrorForNode(ParserErrorCode.ASSERT_DOES_NOT_TAKE_CASCADE, expression);
+ _reportErrorForNode(
+ ParserErrorCode.ASSERT_DOES_NOT_TAKE_CASCADE,
+ expression);
} else if (expression is ThrowExpression) {
- _reportErrorForNode(ParserErrorCode.ASSERT_DOES_NOT_TAKE_THROW, expression);
+ _reportErrorForNode(
+ ParserErrorCode.ASSERT_DOES_NOT_TAKE_THROW,
+ expression);
} else if (expression is RethrowExpression) {
- _reportErrorForNode(ParserErrorCode.ASSERT_DOES_NOT_TAKE_RETHROW, expression);
+ _reportErrorForNode(
+ ParserErrorCode.ASSERT_DOES_NOT_TAKE_RETHROW,
+ expression);
}
Token rightParen = _expect(TokenType.CLOSE_PAREN);
Token semicolon = _expect(TokenType.SEMICOLON);
- return new AssertStatement(keyword, leftParen, expression, rightParen, semicolon);
+ return new AssertStatement(
+ keyword,
+ leftParen,
+ expression,
+ rightParen,
+ semicolon);
}
/**
@@ -3599,9 +4636,9 @@ class Parser {
return _parseAssignableSelector(new SuperExpression(andAdvance), false);
}
//
- // A primary expression can start with an identifier. We resolve the ambiguity by determining
- // whether the primary consists of anything other than an identifier and/or is followed by an
- // assignableSelector.
+ // A primary expression can start with an identifier. We resolve the
+ // ambiguity by determining whether the primary consists of anything other
+ // than an identifier and/or is followed by an assignableSelector.
//
Expression expression = _parsePrimaryExpression();
bool isOptional = primaryAllowed || expression is SimpleIdentifier;
@@ -3609,25 +4646,40 @@ class Parser {
while (_matches(TokenType.OPEN_PAREN)) {
ArgumentList argumentList = parseArgumentList();
if (expression is SimpleIdentifier) {
- expression = new MethodInvocation(null, null, expression as SimpleIdentifier, argumentList);
+ expression =
+ new MethodInvocation(null, null, expression as SimpleIdentifier, argumentList);
} else if (expression is PrefixedIdentifier) {
PrefixedIdentifier identifier = expression as PrefixedIdentifier;
- expression = new MethodInvocation(identifier.prefix, identifier.period, identifier.identifier, argumentList);
+ expression = new MethodInvocation(
+ identifier.prefix,
+ identifier.period,
+ identifier.identifier,
+ argumentList);
} else if (expression is PropertyAccess) {
PropertyAccess access = expression as PropertyAccess;
- expression = new MethodInvocation(access.target, access.operator, access.propertyName, argumentList);
+ expression = new MethodInvocation(
+ access.target,
+ access.operator,
+ access.propertyName,
+ argumentList);
} else {
- expression = new FunctionExpressionInvocation(expression, argumentList);
+ expression =
+ new FunctionExpressionInvocation(expression, argumentList);
}
if (!primaryAllowed) {
isOptional = false;
}
}
- Expression selectorExpression = _parseAssignableSelector(expression, isOptional || (expression is PrefixedIdentifier));
+ Expression selectorExpression = _parseAssignableSelector(
+ expression,
+ isOptional || (expression is PrefixedIdentifier));
if (identical(selectorExpression, expression)) {
if (!isOptional && (expression is PrefixedIdentifier)) {
PrefixedIdentifier identifier = expression as PrefixedIdentifier;
- expression = new PropertyAccess(identifier.prefix, identifier.period, identifier.identifier);
+ expression = new PropertyAccess(
+ identifier.prefix,
+ identifier.period,
+ identifier.identifier);
}
return expression;
}
@@ -3658,7 +4710,11 @@ class Parser {
try {
Expression index = parseExpression2();
Token rightBracket = _expect(TokenType.CLOSE_SQUARE_BRACKET);
- return new IndexExpression.forTarget(prefix, leftBracket, index, rightBracket);
+ return new IndexExpression.forTarget(
+ prefix,
+ leftBracket,
+ index,
+ rightBracket);
} finally {
_inInitializer = wasInInitializer;
}
@@ -3668,7 +4724,8 @@ class Parser {
} else {
if (!optional) {
// Report the missing selector.
- _reportErrorForCurrentToken(ParserErrorCode.MISSING_ASSIGNABLE_SELECTOR);
+ _reportErrorForCurrentToken(
+ ParserErrorCode.MISSING_ASSIGNABLE_SELECTOR);
}
return prefix;
}
@@ -3703,14 +4760,16 @@ class Parser {
*/
Expression _parseBitwiseAndExpression() {
Expression expression;
- if (_matchesKeyword(Keyword.SUPER) && _tokenMatches(_peek(), TokenType.AMPERSAND)) {
+ if (_matchesKeyword(Keyword.SUPER) &&
+ _tokenMatches(_peek(), TokenType.AMPERSAND)) {
expression = new SuperExpression(andAdvance);
} else {
expression = _parseShiftExpression();
}
while (_matches(TokenType.AMPERSAND)) {
Token operator = andAdvance;
- expression = new BinaryExpression(expression, operator, _parseShiftExpression());
+ expression =
+ new BinaryExpression(expression, operator, _parseShiftExpression());
}
return expression;
}
@@ -3728,14 +4787,16 @@ class Parser {
*/
Expression _parseBitwiseXorExpression() {
Expression expression;
- if (_matchesKeyword(Keyword.SUPER) && _tokenMatches(_peek(), TokenType.CARET)) {
+ if (_matchesKeyword(Keyword.SUPER) &&
+ _tokenMatches(_peek(), TokenType.CARET)) {
expression = new SuperExpression(andAdvance);
} else {
expression = _parseBitwiseAndExpression();
}
while (_matches(TokenType.CARET)) {
Token operator = andAdvance;
- expression = new BinaryExpression(expression, operator, _parseBitwiseAndExpression());
+ expression =
+ new BinaryExpression(expression, operator, _parseBitwiseAndExpression());
}
return expression;
}
@@ -3793,27 +4854,38 @@ class Parser {
try {
Expression index = parseExpression2();
Token rightBracket = _expect(TokenType.CLOSE_SQUARE_BRACKET);
- expression = new IndexExpression.forCascade(period, leftBracket, index, rightBracket);
+ expression =
+ new IndexExpression.forCascade(period, leftBracket, index, rightBracket);
period = null;
} finally {
_inInitializer = wasInInitializer;
}
} else {
- _reportErrorForToken(ParserErrorCode.MISSING_IDENTIFIER, _currentToken, [_currentToken.lexeme]);
+ _reportErrorForToken(
+ ParserErrorCode.MISSING_IDENTIFIER,
+ _currentToken,
+ [_currentToken.lexeme]);
functionName = _createSyntheticIdentifier();
}
- assert((expression == null && functionName != null) || (expression != null && functionName == null));
+ assert((expression == null && functionName != null) ||
+ (expression != null && functionName == null));
if (_currentToken.type == TokenType.OPEN_PAREN) {
while (_currentToken.type == TokenType.OPEN_PAREN) {
if (functionName != null) {
- expression = new MethodInvocation(expression, period, functionName, parseArgumentList());
+ expression =
+ new MethodInvocation(expression, period, functionName, parseArgumentList());
period = null;
functionName = null;
} else if (expression == null) {
// It should not be possible to get here.
- expression = new MethodInvocation(expression, period, _createSyntheticIdentifier(), parseArgumentList());
+ expression = new MethodInvocation(
+ expression,
+ period,
+ _createSyntheticIdentifier(),
+ parseArgumentList());
} else {
- expression = new FunctionExpressionInvocation(expression, parseArgumentList());
+ expression =
+ new FunctionExpressionInvocation(expression, parseArgumentList());
}
}
} else if (functionName != null) {
@@ -3831,9 +4903,14 @@ class Parser {
while (_currentToken.type == TokenType.OPEN_PAREN) {
if (expression is PropertyAccess) {
PropertyAccess propertyAccess = expression as PropertyAccess;
- expression = new MethodInvocation(propertyAccess.target, propertyAccess.operator, propertyAccess.propertyName, parseArgumentList());
+ expression = new MethodInvocation(
+ propertyAccess.target,
+ propertyAccess.operator,
+ propertyAccess.propertyName,
+ parseArgumentList());
} else {
- expression = new FunctionExpressionInvocation(expression, parseArgumentList());
+ expression =
+ new FunctionExpressionInvocation(expression, parseArgumentList());
}
}
}
@@ -3841,7 +4918,10 @@ class Parser {
if (_currentToken.type.isAssignmentOperator) {
Token operator = andAdvance;
_ensureAssignable(expression);
- expression = new AssignmentExpression(expression, operator, parseExpressionWithoutCascade());
+ expression = new AssignmentExpression(
+ expression,
+ operator,
+ parseExpressionWithoutCascade());
}
return expression;
}
@@ -3860,17 +4940,25 @@ class Parser {
* not given
* @return the class declaration that was parsed
*/
- CompilationUnitMember _parseClassDeclaration(CommentAndMetadata commentAndMetadata, Token abstractKeyword) {
+ CompilationUnitMember
+ _parseClassDeclaration(CommentAndMetadata commentAndMetadata,
+ Token abstractKeyword) {
Token keyword = _expectKeyword(Keyword.CLASS);
if (_matchesIdentifier()) {
Token next = _peek();
if (_tokenMatches(next, TokenType.LT)) {
next = _skipTypeParameterList(next);
if (next != null && _tokenMatches(next, TokenType.EQ)) {
- return _parseClassTypeAlias(commentAndMetadata, abstractKeyword, keyword);
+ return _parseClassTypeAlias(
+ commentAndMetadata,
+ abstractKeyword,
+ keyword);
}
} else if (_tokenMatches(next, TokenType.EQ)) {
- return _parseClassTypeAlias(commentAndMetadata, abstractKeyword, keyword);
+ return _parseClassTypeAlias(
+ commentAndMetadata,
+ abstractKeyword,
+ keyword);
}
}
SimpleIdentifier name = parseSimpleIdentifier();
@@ -3880,8 +4968,9 @@ class Parser {
typeParameters = parseTypeParameterList();
}
//
- // Parse the clauses. The parser accepts clauses in any order, but will generate errors if they
- // are not in the order required by the specification.
+ // Parse the clauses. The parser accepts clauses in any order, but will
+ // generate errors if they are not in the order required by the
+ // specification.
//
ExtendsClause extendsClause = null;
WithClause withClause = null;
@@ -3892,39 +4981,55 @@ class Parser {
if (extendsClause == null) {
extendsClause = parseExtendsClause();
if (withClause != null) {
- _reportErrorForToken(ParserErrorCode.WITH_BEFORE_EXTENDS, withClause.withKeyword);
+ _reportErrorForToken(
+ ParserErrorCode.WITH_BEFORE_EXTENDS,
+ withClause.withKeyword);
} else if (implementsClause != null) {
- _reportErrorForToken(ParserErrorCode.IMPLEMENTS_BEFORE_EXTENDS, implementsClause.keyword);
+ _reportErrorForToken(
+ ParserErrorCode.IMPLEMENTS_BEFORE_EXTENDS,
+ implementsClause.keyword);
}
} else {
- _reportErrorForToken(ParserErrorCode.MULTIPLE_EXTENDS_CLAUSES, extendsClause.keyword);
+ _reportErrorForToken(
+ ParserErrorCode.MULTIPLE_EXTENDS_CLAUSES,
+ extendsClause.keyword);
parseExtendsClause();
}
} else if (_matchesKeyword(Keyword.WITH)) {
if (withClause == null) {
withClause = parseWithClause();
if (implementsClause != null) {
- _reportErrorForToken(ParserErrorCode.IMPLEMENTS_BEFORE_WITH, implementsClause.keyword);
+ _reportErrorForToken(
+ ParserErrorCode.IMPLEMENTS_BEFORE_WITH,
+ implementsClause.keyword);
}
} else {
- _reportErrorForToken(ParserErrorCode.MULTIPLE_WITH_CLAUSES, withClause.withKeyword);
+ _reportErrorForToken(
+ ParserErrorCode.MULTIPLE_WITH_CLAUSES,
+ withClause.withKeyword);
parseWithClause();
- // TODO(brianwilkerson) Should we merge the list of applied mixins into a single list?
+ // TODO(brianwilkerson) Should we merge the list of applied mixins
+ // into a single list?
}
} else if (_matchesKeyword(Keyword.IMPLEMENTS)) {
if (implementsClause == null) {
implementsClause = parseImplementsClause();
} else {
- _reportErrorForToken(ParserErrorCode.MULTIPLE_IMPLEMENTS_CLAUSES, implementsClause.keyword);
+ _reportErrorForToken(
+ ParserErrorCode.MULTIPLE_IMPLEMENTS_CLAUSES,
+ implementsClause.keyword);
parseImplementsClause();
- // TODO(brianwilkerson) Should we merge the list of implemented classes into a single list?
+ // TODO(brianwilkerson) Should we merge the list of implemented
+ // classes into a single list?
}
} else {
foundClause = false;
}
}
if (withClause != null && extendsClause == null) {
- _reportErrorForToken(ParserErrorCode.WITH_WITHOUT_EXTENDS, withClause.withKeyword);
+ _reportErrorForToken(
+ ParserErrorCode.WITH_WITHOUT_EXTENDS,
+ withClause.withKeyword);
}
//
// Look for and skip over the extra-lingual 'native' specification.
@@ -3948,7 +5053,19 @@ class Parser {
rightBracket = _createSyntheticToken(TokenType.CLOSE_CURLY_BRACKET);
_reportErrorForCurrentToken(ParserErrorCode.MISSING_CLASS_BODY);
}
- ClassDeclaration classDeclaration = new ClassDeclaration(commentAndMetadata.comment, commentAndMetadata.metadata, abstractKeyword, keyword, name, typeParameters, extendsClause, withClause, implementsClause, leftBracket, members, rightBracket);
+ ClassDeclaration classDeclaration = new ClassDeclaration(
+ commentAndMetadata.comment,
+ commentAndMetadata.metadata,
+ abstractKeyword,
+ keyword,
+ name,
+ typeParameters,
+ extendsClause,
+ withClause,
+ implementsClause,
+ leftBracket,
+ members,
+ rightBracket);
classDeclaration.nativeClause = nativeClause;
return classDeclaration;
}
@@ -3969,9 +5086,15 @@ class Parser {
List<ClassMember> _parseClassMembers(String className, Token closingBracket) {
List<ClassMember> members = new List<ClassMember>();
Token memberStart = _currentToken;
- while (!_matches(TokenType.EOF) && !_matches(TokenType.CLOSE_CURLY_BRACKET) && (closingBracket != null || (!_matchesKeyword(Keyword.CLASS) && !_matchesKeyword(Keyword.TYPEDEF)))) {
+ while (!_matches(TokenType.EOF) &&
+ !_matches(TokenType.CLOSE_CURLY_BRACKET) &&
+ (closingBracket != null ||
+ (!_matchesKeyword(Keyword.CLASS) && !_matchesKeyword(Keyword.TYPEDEF)))) {
if (_matches(TokenType.SEMICOLON)) {
- _reportErrorForToken(ParserErrorCode.UNEXPECTED_TOKEN, _currentToken, [_currentToken.lexeme]);
+ _reportErrorForToken(
+ ParserErrorCode.UNEXPECTED_TOKEN,
+ _currentToken,
+ [_currentToken.lexeme]);
_advance();
} else {
ClassMember member = parseClassMember(className);
@@ -3980,7 +5103,10 @@ class Parser {
}
}
if (identical(_currentToken, memberStart)) {
- _reportErrorForToken(ParserErrorCode.UNEXPECTED_TOKEN, _currentToken, [_currentToken.lexeme]);
+ _reportErrorForToken(
+ ParserErrorCode.UNEXPECTED_TOKEN,
+ _currentToken,
+ [_currentToken.lexeme]);
_advance();
}
memberStart = _currentToken;
@@ -4004,7 +5130,8 @@ class Parser {
* @param classKeyword the token representing the 'class' keyword
* @return the class type alias that was parsed
*/
- ClassTypeAlias _parseClassTypeAlias(CommentAndMetadata commentAndMetadata, Token abstractKeyword, Token classKeyword) {
+ ClassTypeAlias _parseClassTypeAlias(CommentAndMetadata commentAndMetadata,
+ Token abstractKeyword, Token classKeyword) {
SimpleIdentifier className = parseSimpleIdentifier();
TypeParameterList typeParameters = null;
if (_matches(TokenType.LT)) {
@@ -4016,7 +5143,9 @@ class Parser {
if (_matchesKeyword(Keyword.WITH)) {
withClause = parseWithClause();
} else {
- _reportErrorForCurrentToken(ParserErrorCode.EXPECTED_TOKEN, [Keyword.WITH.syntax]);
+ _reportErrorForCurrentToken(
+ ParserErrorCode.EXPECTED_TOKEN,
+ [Keyword.WITH.syntax]);
}
ImplementsClause implementsClause = null;
if (_matchesKeyword(Keyword.IMPLEMENTS)) {
@@ -4027,16 +5156,32 @@ class Parser {
semicolon = andAdvance;
} else {
if (_matches(TokenType.OPEN_CURLY_BRACKET)) {
- _reportErrorForCurrentToken(ParserErrorCode.EXPECTED_TOKEN, [TokenType.SEMICOLON.lexeme]);
+ _reportErrorForCurrentToken(
+ ParserErrorCode.EXPECTED_TOKEN,
+ [TokenType.SEMICOLON.lexeme]);
Token leftBracket = andAdvance;
_parseClassMembers(className.name, _getEndToken(leftBracket));
_expect(TokenType.CLOSE_CURLY_BRACKET);
} else {
- _reportErrorForToken(ParserErrorCode.EXPECTED_TOKEN, _currentToken.previous, [TokenType.SEMICOLON.lexeme]);
+ _reportErrorForToken(
+ ParserErrorCode.EXPECTED_TOKEN,
+ _currentToken.previous,
+ [TokenType.SEMICOLON.lexeme]);
}
semicolon = _createSyntheticToken(TokenType.SEMICOLON);
}
- return new ClassTypeAlias(commentAndMetadata.comment, commentAndMetadata.metadata, classKeyword, className, typeParameters, equals, abstractKeyword, superclass, withClause, implementsClause, semicolon);
+ return new ClassTypeAlias(
+ commentAndMetadata.comment,
+ commentAndMetadata.metadata,
+ classKeyword,
+ className,
+ typeParameters,
+ equals,
+ abstractKeyword,
+ superclass,
+ withClause,
+ implementsClause,
+ semicolon);
}
/**
@@ -4103,15 +5248,21 @@ class Parser {
* @param sourceOffset the offset of the first character of the reference source
* @return the comment reference that was parsed, or `null` if no reference could be found
*/
- CommentReference _parseCommentReference(String referenceSource, int sourceOffset) {
- // TODO(brianwilkerson) The errors are not getting the right offset/length and are being duplicated.
+ CommentReference _parseCommentReference(String referenceSource,
+ int sourceOffset) {
+ // TODO(brianwilkerson) The errors are not getting the right offset/length
+ // and are being duplicated.
if (referenceSource.length == 0) {
- Token syntheticToken = new SyntheticStringToken(TokenType.IDENTIFIER, "", sourceOffset);
+ Token syntheticToken =
+ new SyntheticStringToken(TokenType.IDENTIFIER, "", sourceOffset);
return new CommentReference(null, new SimpleIdentifier(syntheticToken));
}
try {
BooleanErrorListener listener = new BooleanErrorListener();
- Scanner scanner = new Scanner(null, new SubSequenceReader(referenceSource, sourceOffset), listener);
+ Scanner scanner = new Scanner(
+ null,
+ new SubSequenceReader(referenceSource, sourceOffset),
+ listener);
scanner.setSourceStart(1, 1);
Token firstToken = scanner.tokenize();
if (listener.errorReported) {
@@ -4127,8 +5278,12 @@ class Parser {
Token thirdToken = secondToken.next;
Token nextToken;
Identifier identifier;
- if (_tokenMatches(secondToken, TokenType.PERIOD) && _tokenMatchesIdentifier(thirdToken)) {
- identifier = new PrefixedIdentifier(new SimpleIdentifier(firstToken), secondToken, new SimpleIdentifier(thirdToken));
+ if (_tokenMatches(secondToken, TokenType.PERIOD) &&
+ _tokenMatchesIdentifier(thirdToken)) {
+ identifier = new PrefixedIdentifier(
+ new SimpleIdentifier(firstToken),
+ secondToken,
+ new SimpleIdentifier(thirdToken));
nextToken = thirdToken.next;
} else {
identifier = new SimpleIdentifier(firstToken);
@@ -4138,11 +5293,15 @@ class Parser {
return null;
}
return new CommentReference(newKeyword, identifier);
- } else if (_tokenMatchesKeyword(firstToken, Keyword.THIS) || _tokenMatchesKeyword(firstToken, Keyword.NULL) || _tokenMatchesKeyword(firstToken, Keyword.TRUE) || _tokenMatchesKeyword(firstToken, Keyword.FALSE)) {
- // TODO(brianwilkerson) If we want to support this we will need to extend the definition
- // of CommentReference to take an expression rather than an identifier. For now we just
- // ignore it to reduce the number of errors produced, but that's probably not a valid
- // long term approach.
+ } else if (_tokenMatchesKeyword(firstToken, Keyword.THIS) ||
+ _tokenMatchesKeyword(firstToken, Keyword.NULL) ||
+ _tokenMatchesKeyword(firstToken, Keyword.TRUE) ||
+ _tokenMatchesKeyword(firstToken, Keyword.FALSE)) {
+ // TODO(brianwilkerson) If we want to support this we will need to
+ // extend the definition of CommentReference to take an expression
+ // rather than an identifier. For now we just ignore it to reduce the
+ // number of errors produced, but that's probably not a valid long term
+ // approach.
return null;
}
} catch (exception) {
@@ -4181,9 +5340,12 @@ class Parser {
int firstChar = comment.codeUnitAt(leftIndex + 1);
if (firstChar != 0x27 && firstChar != 0x22) {
if (_isLinkText(comment, rightIndex)) {
- // TODO(brianwilkerson) Handle the case where there's a library URI in the link text.
+ // TODO(brianwilkerson) Handle the case where there's a library
+ // URI in the link text.
} else {
- CommentReference reference = _parseCommentReference(comment.substring(leftIndex + 1, rightIndex), nameOffset);
+ CommentReference reference = _parseCommentReference(
+ comment.substring(leftIndex + 1, rightIndex),
+ nameOffset);
if (reference != null) {
references.add(reference);
}
@@ -4193,13 +5355,18 @@ class Parser {
// terminating ']' is not typed yet
int charAfterLeft = comment.codeUnitAt(leftIndex + 1);
if (Character.isLetterOrDigit(charAfterLeft)) {
- int nameEnd = StringUtilities.indexOfFirstNotLetterDigit(comment, leftIndex + 1);
+ int nameEnd =
+ StringUtilities.indexOfFirstNotLetterDigit(comment, leftIndex + 1);
String name = comment.substring(leftIndex + 1, nameEnd);
- Token nameToken = new StringToken(TokenType.IDENTIFIER, name, nameOffset);
- references.add(new CommentReference(null, new SimpleIdentifier(nameToken)));
+ Token nameToken =
+ new StringToken(TokenType.IDENTIFIER, name, nameOffset);
+ references.add(
+ new CommentReference(null, new SimpleIdentifier(nameToken)));
} else {
- Token nameToken = new SyntheticStringToken(TokenType.IDENTIFIER, "", nameOffset);
- references.add(new CommentReference(null, new SimpleIdentifier(nameToken)));
+ Token nameToken =
+ new SyntheticStringToken(TokenType.IDENTIFIER, "", nameOffset);
+ references.add(
+ new CommentReference(null, new SimpleIdentifier(nameToken)));
}
// next character
rightIndex = leftIndex + 1;
@@ -4233,11 +5400,17 @@ class Parser {
* @return the compilation unit member that was parsed, or `null` if what was parsed could
* not be represented as a compilation unit member
*/
- CompilationUnitMember _parseCompilationUnitMember(CommentAndMetadata commentAndMetadata) {
+ CompilationUnitMember
+ _parseCompilationUnitMember(CommentAndMetadata commentAndMetadata) {
Modifiers modifiers = _parseModifiers();
if (_matchesKeyword(Keyword.CLASS)) {
- return _parseClassDeclaration(commentAndMetadata, _validateModifiersForClass(modifiers));
- } else if (_matchesKeyword(Keyword.TYPEDEF) && !_tokenMatches(_peek(), TokenType.PERIOD) && !_tokenMatches(_peek(), TokenType.LT) && !_tokenMatches(_peek(), TokenType.OPEN_PAREN)) {
+ return _parseClassDeclaration(
+ commentAndMetadata,
+ _validateModifiersForClass(modifiers));
+ } else if (_matchesKeyword(Keyword.TYPEDEF) &&
+ !_tokenMatches(_peek(), TokenType.PERIOD) &&
+ !_tokenMatches(_peek(), TokenType.LT) &&
+ !_tokenMatches(_peek(), TokenType.OPEN_PAREN)) {
_validateModifiersForTypedef(modifiers);
return _parseTypeAlias(commentAndMetadata);
} else if (_parseEnum && _matchesKeyword(Keyword.ENUM)) {
@@ -4246,40 +5419,62 @@ class Parser {
}
if (_matchesKeyword(Keyword.VOID)) {
TypeName returnType = parseReturnType();
- if ((_matchesKeyword(Keyword.GET) || _matchesKeyword(Keyword.SET)) && _tokenMatchesIdentifier(_peek())) {
+ if ((_matchesKeyword(Keyword.GET) || _matchesKeyword(Keyword.SET)) &&
+ _tokenMatchesIdentifier(_peek())) {
_validateModifiersForTopLevelFunction(modifiers);
- return _parseFunctionDeclaration(commentAndMetadata, modifiers.externalKeyword, returnType);
+ return _parseFunctionDeclaration(
+ commentAndMetadata,
+ modifiers.externalKeyword,
+ returnType);
} else if (_matchesKeyword(Keyword.OPERATOR) && _isOperator(_peek())) {
_reportErrorForToken(ParserErrorCode.TOP_LEVEL_OPERATOR, _currentToken);
- return _convertToFunctionDeclaration(_parseOperator(commentAndMetadata, modifiers.externalKeyword, returnType));
- } else if (_matchesIdentifier() && _peek().matchesAny([
- TokenType.OPEN_PAREN,
- TokenType.OPEN_CURLY_BRACKET,
- TokenType.FUNCTION])) {
+ return _convertToFunctionDeclaration(
+ _parseOperator(commentAndMetadata, modifiers.externalKeyword, returnType));
+ } else if (_matchesIdentifier() &&
+ _peek().matchesAny(
+ [TokenType.OPEN_PAREN, TokenType.OPEN_CURLY_BRACKET, TokenType.FUNCTION])) {
_validateModifiersForTopLevelFunction(modifiers);
- return _parseFunctionDeclaration(commentAndMetadata, modifiers.externalKeyword, returnType);
+ return _parseFunctionDeclaration(
+ commentAndMetadata,
+ modifiers.externalKeyword,
+ returnType);
} else {
//
// We have found an error of some kind. Try to recover.
//
if (_matchesIdentifier()) {
- if (_peek().matchesAny([TokenType.EQ, TokenType.COMMA, TokenType.SEMICOLON])) {
+ if (_peek().matchesAny(
+ [TokenType.EQ, TokenType.COMMA, TokenType.SEMICOLON])) {
//
// We appear to have a variable declaration with a type of "void".
//
_reportErrorForNode(ParserErrorCode.VOID_VARIABLE, returnType);
- return new TopLevelVariableDeclaration(commentAndMetadata.comment, commentAndMetadata.metadata, _parseVariableDeclarationListAfterType(null, _validateModifiersForTopLevelVariable(modifiers), null), _expect(TokenType.SEMICOLON));
+ return new TopLevelVariableDeclaration(
+ commentAndMetadata.comment,
+ commentAndMetadata.metadata,
+ _parseVariableDeclarationListAfterType(
+ null,
+ _validateModifiersForTopLevelVariable(modifiers),
+ null),
+ _expect(TokenType.SEMICOLON));
}
}
- _reportErrorForToken(ParserErrorCode.EXPECTED_EXECUTABLE, _currentToken);
+ _reportErrorForToken(
+ ParserErrorCode.EXPECTED_EXECUTABLE,
+ _currentToken);
return null;
}
- } else if ((_matchesKeyword(Keyword.GET) || _matchesKeyword(Keyword.SET)) && _tokenMatchesIdentifier(_peek())) {
+ } else if ((_matchesKeyword(Keyword.GET) || _matchesKeyword(Keyword.SET)) &&
+ _tokenMatchesIdentifier(_peek())) {
_validateModifiersForTopLevelFunction(modifiers);
- return _parseFunctionDeclaration(commentAndMetadata, modifiers.externalKeyword, null);
+ return _parseFunctionDeclaration(
+ commentAndMetadata,
+ modifiers.externalKeyword,
+ null);
} else if (_matchesKeyword(Keyword.OPERATOR) && _isOperator(_peek())) {
_reportErrorForToken(ParserErrorCode.TOP_LEVEL_OPERATOR, _currentToken);
- return _convertToFunctionDeclaration(_parseOperator(commentAndMetadata, modifiers.externalKeyword, null));
+ return _convertToFunctionDeclaration(
+ _parseOperator(commentAndMetadata, modifiers.externalKeyword, null));
} else if (!_matchesIdentifier()) {
Token keyword = modifiers.varKeyword;
if (keyword == null) {
@@ -4294,31 +5489,63 @@ class Parser {
//
_reportErrorForCurrentToken(ParserErrorCode.MISSING_IDENTIFIER);
List<VariableDeclaration> variables = new List<VariableDeclaration>();
- variables.add(new VariableDeclaration(null, null, _createSyntheticIdentifier(), null, null));
- return new TopLevelVariableDeclaration(commentAndMetadata.comment, commentAndMetadata.metadata, new VariableDeclarationList(null, null, keyword, null, variables), _expectSemicolon());
+ variables.add(
+ new VariableDeclaration(null, null, _createSyntheticIdentifier(), null, null));
+ return new TopLevelVariableDeclaration(
+ commentAndMetadata.comment,
+ commentAndMetadata.metadata,
+ new VariableDeclarationList(null, null, keyword, null, variables),
+ _expectSemicolon());
}
_reportErrorForToken(ParserErrorCode.EXPECTED_EXECUTABLE, _currentToken);
return null;
} else if (_tokenMatches(_peek(), TokenType.OPEN_PAREN)) {
_validateModifiersForTopLevelFunction(modifiers);
- return _parseFunctionDeclaration(commentAndMetadata, modifiers.externalKeyword, null);
- } else if (_peek().matchesAny([TokenType.EQ, TokenType.COMMA, TokenType.SEMICOLON])) {
- if (modifiers.constKeyword == null && modifiers.finalKeyword == null && modifiers.varKeyword == null) {
- _reportErrorForCurrentToken(ParserErrorCode.MISSING_CONST_FINAL_VAR_OR_TYPE);
- }
- return new TopLevelVariableDeclaration(commentAndMetadata.comment, commentAndMetadata.metadata, _parseVariableDeclarationListAfterType(null, _validateModifiersForTopLevelVariable(modifiers), null), _expect(TokenType.SEMICOLON));
+ return _parseFunctionDeclaration(
+ commentAndMetadata,
+ modifiers.externalKeyword,
+ null);
+ } else if (_peek().matchesAny(
+ [TokenType.EQ, TokenType.COMMA, TokenType.SEMICOLON])) {
+ if (modifiers.constKeyword == null &&
+ modifiers.finalKeyword == null &&
+ modifiers.varKeyword == null) {
+ _reportErrorForCurrentToken(
+ ParserErrorCode.MISSING_CONST_FINAL_VAR_OR_TYPE);
+ }
+ return new TopLevelVariableDeclaration(
+ commentAndMetadata.comment,
+ commentAndMetadata.metadata,
+ _parseVariableDeclarationListAfterType(
+ null,
+ _validateModifiersForTopLevelVariable(modifiers),
+ null),
+ _expect(TokenType.SEMICOLON));
}
TypeName returnType = parseReturnType();
- if ((_matchesKeyword(Keyword.GET) || _matchesKeyword(Keyword.SET)) && _tokenMatchesIdentifier(_peek())) {
+ if ((_matchesKeyword(Keyword.GET) || _matchesKeyword(Keyword.SET)) &&
+ _tokenMatchesIdentifier(_peek())) {
_validateModifiersForTopLevelFunction(modifiers);
- return _parseFunctionDeclaration(commentAndMetadata, modifiers.externalKeyword, returnType);
+ return _parseFunctionDeclaration(
+ commentAndMetadata,
+ modifiers.externalKeyword,
+ returnType);
} else if (_matchesKeyword(Keyword.OPERATOR) && _isOperator(_peek())) {
_reportErrorForToken(ParserErrorCode.TOP_LEVEL_OPERATOR, _currentToken);
- return _convertToFunctionDeclaration(_parseOperator(commentAndMetadata, modifiers.externalKeyword, returnType));
+ return _convertToFunctionDeclaration(
+ _parseOperator(commentAndMetadata, modifiers.externalKeyword, returnType));
} else if (_matches(TokenType.AT)) {
- return new TopLevelVariableDeclaration(commentAndMetadata.comment, commentAndMetadata.metadata, _parseVariableDeclarationListAfterType(null, _validateModifiersForTopLevelVariable(modifiers), returnType), _expect(TokenType.SEMICOLON));
+ return new TopLevelVariableDeclaration(
+ commentAndMetadata.comment,
+ commentAndMetadata.metadata,
+ _parseVariableDeclarationListAfterType(
+ null,
+ _validateModifiersForTopLevelVariable(modifiers),
+ returnType),
+ _expect(TokenType.SEMICOLON));
} else if (!_matchesIdentifier()) {
- // TODO(brianwilkerson) Generalize this error. We could also be parsing a top-level variable at this point.
+ // TODO(brianwilkerson) Generalize this error. We could also be parsing a
+ // top-level variable at this point.
_reportErrorForToken(ParserErrorCode.EXPECTED_EXECUTABLE, _currentToken);
Token semicolon;
if (_matches(TokenType.SEMICOLON)) {
@@ -4327,17 +5554,30 @@ class Parser {
semicolon = _createSyntheticToken(TokenType.SEMICOLON);
}
List<VariableDeclaration> variables = new List<VariableDeclaration>();
- variables.add(new VariableDeclaration(null, null, _createSyntheticIdentifier(), null, null));
- return new TopLevelVariableDeclaration(commentAndMetadata.comment, commentAndMetadata.metadata, new VariableDeclarationList(null, null, null, returnType, variables), semicolon);
- }
- if (_peek().matchesAny([
- TokenType.OPEN_PAREN,
- TokenType.FUNCTION,
- TokenType.OPEN_CURLY_BRACKET])) {
+ variables.add(
+ new VariableDeclaration(null, null, _createSyntheticIdentifier(), null, null));
+ return new TopLevelVariableDeclaration(
+ commentAndMetadata.comment,
+ commentAndMetadata.metadata,
+ new VariableDeclarationList(null, null, null, returnType, variables),
+ semicolon);
+ }
+ if (_peek().matchesAny(
+ [TokenType.OPEN_PAREN, TokenType.FUNCTION, TokenType.OPEN_CURLY_BRACKET])) {
_validateModifiersForTopLevelFunction(modifiers);
- return _parseFunctionDeclaration(commentAndMetadata, modifiers.externalKeyword, returnType);
+ return _parseFunctionDeclaration(
+ commentAndMetadata,
+ modifiers.externalKeyword,
+ returnType);
}
- return new TopLevelVariableDeclaration(commentAndMetadata.comment, commentAndMetadata.metadata, _parseVariableDeclarationListAfterType(null, _validateModifiersForTopLevelVariable(modifiers), returnType), _expect(TokenType.SEMICOLON));
+ return new TopLevelVariableDeclaration(
+ commentAndMetadata.comment,
+ commentAndMetadata.metadata,
+ _parseVariableDeclarationListAfterType(
+ null,
+ _validateModifiersForTopLevelVariable(modifiers),
+ returnType),
+ _expect(TokenType.SEMICOLON));
}
/**
@@ -4364,7 +5604,10 @@ class Parser {
return _parseInstanceCreationExpression(keyword);
}
- ConstructorDeclaration _parseConstructor(CommentAndMetadata commentAndMetadata, Token externalKeyword, Token constKeyword, Token factoryKeyword, SimpleIdentifier returnType, Token period, SimpleIdentifier name, FormalParameterList parameters) {
+ ConstructorDeclaration
+ _parseConstructor(CommentAndMetadata commentAndMetadata, Token externalKeyword,
+ Token constKeyword, Token factoryKeyword, SimpleIdentifier returnType,
+ Token period, SimpleIdentifier name, FormalParameterList parameters) {
bool bodyAllowed = externalKeyword == null;
Token separator = null;
List<ConstructorInitializer> initializers = null;
@@ -4376,7 +5619,8 @@ class Parser {
if (_tokenMatches(_peek(), TokenType.OPEN_PAREN)) {
bodyAllowed = false;
initializers.add(_parseRedirectingConstructorInvocation());
- } else if (_tokenMatches(_peek(), TokenType.PERIOD) && _tokenMatches(_peekAt(3), TokenType.OPEN_PAREN)) {
+ } else if (_tokenMatches(_peek(), TokenType.PERIOD) &&
+ _tokenMatches(_peekAt(3), TokenType.OPEN_PAREN)) {
bodyAllowed = false;
initializers.add(_parseRedirectingConstructorInvocation());
} else {
@@ -4384,15 +5628,17 @@ class Parser {
}
} else if (_matchesKeyword(Keyword.SUPER)) {
initializers.add(_parseSuperConstructorInvocation());
- } else if (_matches(TokenType.OPEN_CURLY_BRACKET)
- || _matches(TokenType.FUNCTION)) {
+ } else if (_matches(TokenType.OPEN_CURLY_BRACKET) ||
+ _matches(TokenType.FUNCTION)) {
_reportErrorForCurrentToken(ParserErrorCode.MISSING_INITIALIZER);
} else {
initializers.add(_parseConstructorFieldInitializer());
}
} while (_optional(TokenType.COMMA));
if (factoryKeyword != null) {
- _reportErrorForToken(ParserErrorCode.FACTORY_WITH_INITIALIZERS, factoryKeyword);
+ _reportErrorForToken(
+ ParserErrorCode.FACTORY_WITH_INITIALIZERS,
+ factoryKeyword);
}
}
ConstructorName redirectedConstructor = null;
@@ -4402,25 +5648,49 @@ class Parser {
redirectedConstructor = parseConstructorName();
body = new EmptyFunctionBody(_expect(TokenType.SEMICOLON));
if (factoryKeyword == null) {
- _reportErrorForNode(ParserErrorCode.REDIRECTION_IN_NON_FACTORY_CONSTRUCTOR, redirectedConstructor);
+ _reportErrorForNode(
+ ParserErrorCode.REDIRECTION_IN_NON_FACTORY_CONSTRUCTOR,
+ redirectedConstructor);
}
} else {
- body = _parseFunctionBody(true, ParserErrorCode.MISSING_FUNCTION_BODY, false);
- if (constKeyword != null && factoryKeyword != null && externalKeyword == null) {
+ body =
+ _parseFunctionBody(true, ParserErrorCode.MISSING_FUNCTION_BODY, false);
+ if (constKeyword != null &&
+ factoryKeyword != null &&
+ externalKeyword == null) {
_reportErrorForToken(ParserErrorCode.CONST_FACTORY, factoryKeyword);
} else if (body is EmptyFunctionBody) {
if (factoryKeyword != null && externalKeyword == null) {
- _reportErrorForToken(ParserErrorCode.FACTORY_WITHOUT_BODY, factoryKeyword);
+ _reportErrorForToken(
+ ParserErrorCode.FACTORY_WITHOUT_BODY,
+ factoryKeyword);
}
} else {
if (constKeyword != null) {
- _reportErrorForNode(ParserErrorCode.CONST_CONSTRUCTOR_WITH_BODY, body);
+ _reportErrorForNode(
+ ParserErrorCode.CONST_CONSTRUCTOR_WITH_BODY,
+ body);
} else if (!bodyAllowed) {
- _reportErrorForNode(ParserErrorCode.EXTERNAL_CONSTRUCTOR_WITH_BODY, body);
+ _reportErrorForNode(
+ ParserErrorCode.EXTERNAL_CONSTRUCTOR_WITH_BODY,
+ body);
}
}
}
- return new ConstructorDeclaration(commentAndMetadata.comment, commentAndMetadata.metadata, externalKeyword, constKeyword, factoryKeyword, returnType, period, name, parameters, separator, initializers, redirectedConstructor, body);
+ return new ConstructorDeclaration(
+ commentAndMetadata.comment,
+ commentAndMetadata.metadata,
+ externalKeyword,
+ constKeyword,
+ factoryKeyword,
+ returnType,
+ period,
+ name,
+ parameters,
+ separator,
+ initializers,
+ redirectedConstructor,
+ body);
}
/**
@@ -4444,14 +5714,16 @@ class Parser {
Token equals = null;
if (_matches(TokenType.EQ)) {
equals = andAdvance;
- } else if (!_matchesKeyword(Keyword.THIS)
- && !_matchesKeyword(Keyword.SUPER)
- && !_matches(TokenType.OPEN_CURLY_BRACKET)
- && !_matches(TokenType.FUNCTION)) {
- _reportErrorForCurrentToken(ParserErrorCode.MISSING_ASSIGNMENT_IN_INITIALIZER);
+ } else if (!_matchesKeyword(Keyword.THIS) &&
+ !_matchesKeyword(Keyword.SUPER) &&
+ !_matches(TokenType.OPEN_CURLY_BRACKET) &&
+ !_matches(TokenType.FUNCTION)) {
+ _reportErrorForCurrentToken(
+ ParserErrorCode.MISSING_ASSIGNMENT_IN_INITIALIZER);
equals = _createSyntheticToken(TokenType.EQ);
} else {
- _reportErrorForCurrentToken(ParserErrorCode.MISSING_ASSIGNMENT_IN_INITIALIZER);
+ _reportErrorForCurrentToken(
+ ParserErrorCode.MISSING_ASSIGNMENT_IN_INITIALIZER);
return new ConstructorFieldInitializer(
keyword,
period,
@@ -4475,7 +5747,12 @@ class Parser {
}
expression = new CascadeExpression(expression, cascadeSections);
}
- return new ConstructorFieldInitializer(keyword, period, fieldName, equals, expression);
+ return new ConstructorFieldInitializer(
+ keyword,
+ period,
+ fieldName,
+ equals,
+ expression);
} finally {
_inInitializer = wasInInitializer;
}
@@ -4494,14 +5771,18 @@ class Parser {
Statement _parseContinueStatement() {
Token continueKeyword = _expectKeyword(Keyword.CONTINUE);
if (!_inLoop && !_inSwitch) {
- _reportErrorForToken(ParserErrorCode.CONTINUE_OUTSIDE_OF_LOOP, continueKeyword);
+ _reportErrorForToken(
+ ParserErrorCode.CONTINUE_OUTSIDE_OF_LOOP,
+ continueKeyword);
}
SimpleIdentifier label = null;
if (_matchesIdentifier()) {
label = parseSimpleIdentifier();
}
if (_inSwitch && !_inLoop && label == null) {
- _reportErrorForToken(ParserErrorCode.CONTINUE_WITHOUT_LABEL_IN_CASE, continueKeyword);
+ _reportErrorForToken(
+ ParserErrorCode.CONTINUE_WITHOUT_LABEL_IN_CASE,
+ continueKeyword);
}
Token semicolon = _expect(TokenType.SEMICOLON);
return new ContinueStatement(continueKeyword, label, semicolon);
@@ -4531,9 +5812,10 @@ class Parser {
} else if (_matchesKeyword(Keyword.PART)) {
return _parsePartDirective(commentAndMetadata);
} else {
- // Internal error: this method should not have been invoked if the current token was something
- // other than one of the above.
- throw new IllegalStateException("parseDirective invoked in an invalid state; currentToken = $_currentToken");
+ // Internal error: this method should not have been invoked if the current
+ // token was something other than one of the above.
+ throw new IllegalStateException(
+ "parseDirective invoked in an invalid state; currentToken = $_currentToken");
}
}
@@ -4558,7 +5840,13 @@ class Parser {
List<Directive> directives = new List<Directive>();
while (!_matches(TokenType.EOF)) {
CommentAndMetadata commentAndMetadata = _parseCommentAndMetadata();
- if ((_matchesKeyword(Keyword.IMPORT) || _matchesKeyword(Keyword.EXPORT) || _matchesKeyword(Keyword.LIBRARY) || _matchesKeyword(Keyword.PART)) && !_tokenMatches(_peek(), TokenType.PERIOD) && !_tokenMatches(_peek(), TokenType.LT) && !_tokenMatches(_peek(), TokenType.OPEN_PAREN)) {
+ if ((_matchesKeyword(Keyword.IMPORT) ||
+ _matchesKeyword(Keyword.EXPORT) ||
+ _matchesKeyword(Keyword.LIBRARY) ||
+ _matchesKeyword(Keyword.PART)) &&
+ !_tokenMatches(_peek(), TokenType.PERIOD) &&
+ !_tokenMatches(_peek(), TokenType.LT) &&
+ !_tokenMatches(_peek(), TokenType.OPEN_PAREN)) {
directives.add(_parseDirective(commentAndMetadata));
} else if (_matches(TokenType.SEMICOLON)) {
_advance();
@@ -4566,10 +5854,20 @@ class Parser {
while (!_matches(TokenType.EOF)) {
_advance();
}
- return new CompilationUnit(firstToken, scriptTag, directives, new List<CompilationUnitMember>(), _currentToken);
+ return new CompilationUnit(
+ firstToken,
+ scriptTag,
+ directives,
+ new List<CompilationUnitMember>(),
+ _currentToken);
}
}
- return new CompilationUnit(firstToken, scriptTag, directives, new List<CompilationUnitMember>(), _currentToken);
+ return new CompilationUnit(
+ firstToken,
+ scriptTag,
+ directives,
+ new List<CompilationUnitMember>(),
+ _currentToken);
}
/**
@@ -4588,14 +5886,25 @@ class Parser {
Token commentToken = _currentToken.precedingComments;
while (commentToken != null) {
if (commentToken.type == TokenType.SINGLE_LINE_COMMENT) {
- if (StringUtilities.startsWith3(commentToken.lexeme, 0, 0x2F, 0x2F, 0x2F)) {
- if (commentTokens.length == 1 && StringUtilities.startsWith3(commentTokens[0].lexeme, 0, 0x2F, 0x2A, 0x2A)) {
+ if (StringUtilities.startsWith3(
+ commentToken.lexeme,
+ 0,
+ 0x2F,
+ 0x2F,
+ 0x2F)) {
+ if (commentTokens.length == 1 &&
+ StringUtilities.startsWith3(commentTokens[0].lexeme, 0, 0x2F, 0x2A, 0x2A)) {
commentTokens.clear();
}
commentTokens.add(commentToken);
}
} else {
- if (StringUtilities.startsWith3(commentToken.lexeme, 0, 0x2F, 0x2A, 0x2A)) {
+ if (StringUtilities.startsWith3(
+ commentToken.lexeme,
+ 0,
+ 0x2F,
+ 0x2A,
+ 0x2A)) {
commentTokens.clear();
commentTokens.add(commentToken);
}
@@ -4606,7 +5915,9 @@ class Parser {
return null;
}
List<CommentReference> references = _parseCommentReferences(commentTokens);
- return Comment.createDocumentationCommentWithReferences(commentTokens, references);
+ return Comment.createDocumentationCommentWithReferences(
+ commentTokens,
+ references);
}
/**
@@ -4630,7 +5941,14 @@ class Parser {
Expression condition = parseExpression2();
Token rightParenthesis = _expect(TokenType.CLOSE_PAREN);
Token semicolon = _expect(TokenType.SEMICOLON);
- return new DoStatement(doKeyword, body, whileKeyword, leftParenthesis, condition, rightParenthesis, semicolon);
+ return new DoStatement(
+ doKeyword,
+ body,
+ whileKeyword,
+ leftParenthesis,
+ condition,
+ rightParenthesis,
+ semicolon);
} finally {
_inLoop = wasInLoop;
}
@@ -4656,7 +5974,10 @@ class Parser {
} else {
name = _createSyntheticIdentifier();
}
- return new EnumConstantDeclaration(commentAndMetadata.comment, commentAndMetadata.metadata, name);
+ return new EnumConstantDeclaration(
+ commentAndMetadata.comment,
+ commentAndMetadata.metadata,
+ name);
}
/**
@@ -4674,13 +5995,15 @@ class Parser {
Token keyword = _expectKeyword(Keyword.ENUM);
SimpleIdentifier name = parseSimpleIdentifier();
Token leftBracket = null;
- List<EnumConstantDeclaration> constants = new List<EnumConstantDeclaration>();
+ List<EnumConstantDeclaration> constants =
+ new List<EnumConstantDeclaration>();
Token rightBracket = null;
if (_matches(TokenType.OPEN_CURLY_BRACKET)) {
leftBracket = _expect(TokenType.OPEN_CURLY_BRACKET);
if (_matchesIdentifier()) {
constants.add(_parseEnumConstantDeclaration());
- } else if (_matches(TokenType.COMMA) && _tokenMatchesIdentifier(_peek())) {
+ } else if (_matches(TokenType.COMMA) &&
+ _tokenMatchesIdentifier(_peek())) {
constants.add(_parseEnumConstantDeclaration());
_reportErrorForCurrentToken(ParserErrorCode.MISSING_IDENTIFIER);
} else {
@@ -4699,7 +6022,14 @@ class Parser {
rightBracket = _createSyntheticToken(TokenType.CLOSE_CURLY_BRACKET);
_reportErrorForCurrentToken(ParserErrorCode.MISSING_ENUM_BODY);
}
- return new EnumDeclaration(commentAndMetadata.comment, commentAndMetadata.metadata, keyword, name, leftBracket, constants, rightBracket);
+ return new EnumDeclaration(
+ commentAndMetadata.comment,
+ commentAndMetadata.metadata,
+ keyword,
+ name,
+ leftBracket,
+ constants,
+ rightBracket);
}
/**
@@ -4715,7 +6045,8 @@ class Parser {
*/
Expression _parseEqualityExpression() {
Expression expression;
- if (_matchesKeyword(Keyword.SUPER) && _currentToken.next.type.isEqualityOperator) {
+ if (_matchesKeyword(Keyword.SUPER) &&
+ _currentToken.next.type.isEqualityOperator) {
expression = new SuperExpression(andAdvance);
} else {
expression = _parseRelationalExpression();
@@ -4724,9 +6055,12 @@ class Parser {
while (_currentToken.type.isEqualityOperator) {
Token operator = andAdvance;
if (leftEqualityExpression) {
- _reportErrorForNode(ParserErrorCode.EQUALITY_CANNOT_BE_EQUALITY_OPERAND, expression);
+ _reportErrorForNode(
+ ParserErrorCode.EQUALITY_CANNOT_BE_EQUALITY_OPERAND,
+ expression);
}
- expression = new BinaryExpression(expression, operator, _parseRelationalExpression());
+ expression =
+ new BinaryExpression(expression, operator, _parseRelationalExpression());
leftEqualityExpression = true;
}
return expression;
@@ -4748,7 +6082,13 @@ class Parser {
StringLiteral libraryUri = parseStringLiteral();
List<Combinator> combinators = _parseCombinators();
Token semicolon = _expectSemicolon();
- return new ExportDirective(commentAndMetadata.comment, commentAndMetadata.metadata, exportKeyword, libraryUri, combinators, semicolon);
+ return new ExportDirective(
+ commentAndMetadata.comment,
+ commentAndMetadata.metadata,
+ exportKeyword,
+ libraryUri,
+ combinators,
+ semicolon);
}
/**
@@ -4798,7 +6138,8 @@ class Parser {
if (_isTypedIdentifier(_currentToken)) {
type = parseReturnType();
} else if (!optional) {
- _reportErrorForCurrentToken(ParserErrorCode.MISSING_CONST_FINAL_VAR_OR_TYPE);
+ _reportErrorForCurrentToken(
+ ParserErrorCode.MISSING_CONST_FINAL_VAR_OR_TYPE);
}
}
return new FinalConstVarOrType(keyword, type);
@@ -4826,20 +6167,36 @@ class Parser {
Token seperator = andAdvance;
Expression defaultValue = parseExpression2();
if (kind == ParameterKind.NAMED) {
- _reportErrorForToken(ParserErrorCode.WRONG_SEPARATOR_FOR_NAMED_PARAMETER, seperator);
+ _reportErrorForToken(
+ ParserErrorCode.WRONG_SEPARATOR_FOR_NAMED_PARAMETER,
+ seperator);
} else if (kind == ParameterKind.REQUIRED) {
- _reportErrorForNode(ParserErrorCode.POSITIONAL_PARAMETER_OUTSIDE_GROUP, parameter);
- }
- return new DefaultFormalParameter(parameter, kind, seperator, defaultValue);
+ _reportErrorForNode(
+ ParserErrorCode.POSITIONAL_PARAMETER_OUTSIDE_GROUP,
+ parameter);
+ }
+ return new DefaultFormalParameter(
+ parameter,
+ kind,
+ seperator,
+ defaultValue);
} else if (_matches(TokenType.COLON)) {
Token seperator = andAdvance;
Expression defaultValue = parseExpression2();
if (kind == ParameterKind.POSITIONAL) {
- _reportErrorForToken(ParserErrorCode.WRONG_SEPARATOR_FOR_POSITIONAL_PARAMETER, seperator);
+ _reportErrorForToken(
+ ParserErrorCode.WRONG_SEPARATOR_FOR_POSITIONAL_PARAMETER,
+ seperator);
} else if (kind == ParameterKind.REQUIRED) {
- _reportErrorForNode(ParserErrorCode.NAMED_PARAMETER_OUTSIDE_GROUP, parameter);
- }
- return new DefaultFormalParameter(parameter, kind, seperator, defaultValue);
+ _reportErrorForNode(
+ ParserErrorCode.NAMED_PARAMETER_OUTSIDE_GROUP,
+ parameter);
+ }
+ return new DefaultFormalParameter(
+ parameter,
+ kind,
+ seperator,
+ defaultValue);
} else if (kind != ParameterKind.REQUIRED) {
return new DefaultFormalParameter(parameter, kind, null, null);
}
@@ -4882,10 +6239,17 @@ class Parser {
if (_matchesIdentifier() && _tokenMatchesKeyword(_peek(), Keyword.IN)) {
List<VariableDeclaration> variables = new List<VariableDeclaration>();
SimpleIdentifier variableName = parseSimpleIdentifier();
- variables.add(new VariableDeclaration(null, null, variableName, null, null));
- variableList = new VariableDeclarationList(commentAndMetadata.comment, commentAndMetadata.metadata, null, null, variables);
+ variables.add(
+ new VariableDeclaration(null, null, variableName, null, null));
+ variableList = new VariableDeclarationList(
+ commentAndMetadata.comment,
+ commentAndMetadata.metadata,
+ null,
+ null,
+ variables);
} else if (_isInitializedVariableDeclaration()) {
- variableList = _parseVariableDeclarationListAfterMetadata(commentAndMetadata);
+ variableList =
+ _parseVariableDeclarationListAfterMetadata(commentAndMetadata);
} else {
initialization = parseExpression2();
}
@@ -4894,24 +6258,34 @@ class Parser {
SimpleIdentifier identifier = null;
if (variableList == null) {
// We found: <expression> 'in'
- _reportErrorForCurrentToken(ParserErrorCode.MISSING_VARIABLE_IN_FOR_EACH);
+ _reportErrorForCurrentToken(
+ ParserErrorCode.MISSING_VARIABLE_IN_FOR_EACH);
} else {
NodeList<VariableDeclaration> variables = variableList.variables;
if (variables.length > 1) {
- _reportErrorForCurrentToken(ParserErrorCode.MULTIPLE_VARIABLES_IN_FOR_EACH, [variables.length.toString()]);
+ _reportErrorForCurrentToken(
+ ParserErrorCode.MULTIPLE_VARIABLES_IN_FOR_EACH,
+ [variables.length.toString()]);
}
VariableDeclaration variable = variables[0];
if (variable.initializer != null) {
- _reportErrorForCurrentToken(ParserErrorCode.INITIALIZED_VARIABLE_IN_FOR_EACH);
+ _reportErrorForCurrentToken(
+ ParserErrorCode.INITIALIZED_VARIABLE_IN_FOR_EACH);
}
Token keyword = variableList.keyword;
TypeName type = variableList.type;
if (keyword != null || type != null) {
- loopVariable = new DeclaredIdentifier(commentAndMetadata.comment, commentAndMetadata.metadata, keyword, type, variable.name);
+ loopVariable = new DeclaredIdentifier(
+ commentAndMetadata.comment,
+ commentAndMetadata.metadata,
+ keyword,
+ type,
+ variable.name);
} else {
if (!commentAndMetadata.metadata.isEmpty) {
- // TODO(jwren) metadata isn't allowed before the identifier in "identifier in expression",
- // add warning if commentAndMetadata has content
+ // TODO(jwren) metadata isn't allowed before the identifier in
+ // "identifier in expression", add warning if commentAndMetadata
+ // has content
}
identifier = variable.name;
}
@@ -4921,13 +6295,31 @@ class Parser {
Token rightParenthesis = _expect(TokenType.CLOSE_PAREN);
Statement body = parseStatement2();
if (loopVariable == null) {
- return new ForEachStatement.con2(awaitKeyword, forKeyword, leftParenthesis, identifier, inKeyword, iterator, rightParenthesis, body);
+ return new ForEachStatement.con2(
+ awaitKeyword,
+ forKeyword,
+ leftParenthesis,
+ identifier,
+ inKeyword,
+ iterator,
+ rightParenthesis,
+ body);
}
- return new ForEachStatement.con1(awaitKeyword, forKeyword, leftParenthesis, loopVariable, inKeyword, iterator, rightParenthesis, body);
+ return new ForEachStatement.con1(
+ awaitKeyword,
+ forKeyword,
+ leftParenthesis,
+ loopVariable,
+ inKeyword,
+ iterator,
+ rightParenthesis,
+ body);
}
}
if (awaitKeyword != null) {
- _reportErrorForToken(ParserErrorCode.INVALID_AWAIT_IN_FOR, awaitKeyword);
+ _reportErrorForToken(
+ ParserErrorCode.INVALID_AWAIT_IN_FOR,
+ awaitKeyword);
}
Token leftSeparator = _expect(TokenType.SEMICOLON);
Expression condition = null;
@@ -4941,7 +6333,17 @@ class Parser {
}
Token rightParenthesis = _expect(TokenType.CLOSE_PAREN);
Statement body = parseStatement2();
- return new ForStatement(forKeyword, leftParenthesis, variableList, initialization, leftSeparator, condition, rightSeparator, updaters, rightParenthesis, body);
+ return new ForStatement(
+ forKeyword,
+ leftParenthesis,
+ variableList,
+ initialization,
+ leftSeparator,
+ condition,
+ rightSeparator,
+ updaters,
+ rightParenthesis,
+ body);
} finally {
_inLoop = wasInLoop;
}
@@ -4966,7 +6368,8 @@ class Parser {
* and therefore does not have a terminating semicolon
* @return the function body that was parsed
*/
- FunctionBody _parseFunctionBody(bool mayBeEmpty, ParserErrorCode emptyErrorCode, bool inExpression) {
+ FunctionBody _parseFunctionBody(bool mayBeEmpty,
+ ParserErrorCode emptyErrorCode, bool inExpression) {
bool wasInAsync = _inAsync;
bool wasInGenerator = _inGenerator;
bool wasInLoop = _inLoop;
@@ -4987,7 +6390,10 @@ class Parser {
if (_matches(TokenType.STRING)) {
stringLiteral = parseStringLiteral();
}
- return new NativeFunctionBody(nativeToken, stringLiteral, _expect(TokenType.SEMICOLON));
+ return new NativeFunctionBody(
+ nativeToken,
+ stringLiteral,
+ _expect(TokenType.SEMICOLON));
}
Token keyword = null;
Token star = null;
@@ -5013,7 +6419,9 @@ class Parser {
_reportErrorForToken(ParserErrorCode.INVALID_SYNC, keyword);
keyword = null;
} else if (star != null) {
- _reportErrorForToken(ParserErrorCode.INVALID_STAR_AFTER_ASYNC, star);
+ _reportErrorForToken(
+ ParserErrorCode.INVALID_STAR_AFTER_ASYNC,
+ star);
}
}
Token functionDefinition = andAdvance;
@@ -5023,24 +6431,33 @@ class Parser {
semicolon = _expect(TokenType.SEMICOLON);
}
if (!_parseFunctionBodies) {
- return new EmptyFunctionBody(_createSyntheticToken(TokenType.SEMICOLON));
+ return new EmptyFunctionBody(
+ _createSyntheticToken(TokenType.SEMICOLON));
}
- return new ExpressionFunctionBody(keyword, functionDefinition, expression, semicolon);
+ return new ExpressionFunctionBody(
+ keyword,
+ functionDefinition,
+ expression,
+ semicolon);
} else if (_matches(TokenType.OPEN_CURLY_BRACKET)) {
if (keyword != null) {
if (_tokenMatchesString(keyword, SYNC) && star == null) {
- _reportErrorForToken(ParserErrorCode.MISSING_STAR_AFTER_SYNC, keyword);
+ _reportErrorForToken(
+ ParserErrorCode.MISSING_STAR_AFTER_SYNC,
+ keyword);
}
}
if (!_parseFunctionBodies) {
_skipBlock();
- return new EmptyFunctionBody(_createSyntheticToken(TokenType.SEMICOLON));
+ return new EmptyFunctionBody(
+ _createSyntheticToken(TokenType.SEMICOLON));
}
return new BlockFunctionBody(keyword, star, parseBlock());
} else {
// Invalid function body
_reportErrorForCurrentToken(emptyErrorCode);
- return new EmptyFunctionBody(_createSyntheticToken(TokenType.SEMICOLON));
+ return new EmptyFunctionBody(
+ _createSyntheticToken(TokenType.SEMICOLON));
}
} finally {
_inAsync = wasInAsync;
@@ -5066,13 +6483,17 @@ class Parser {
* @param isStatement `true` if the function declaration is being parsed as a statement
* @return the function declaration that was parsed
*/
- FunctionDeclaration _parseFunctionDeclaration(CommentAndMetadata commentAndMetadata, Token externalKeyword, TypeName returnType) {
+ FunctionDeclaration
+ _parseFunctionDeclaration(CommentAndMetadata commentAndMetadata,
+ Token externalKeyword, TypeName returnType) {
Token keyword = null;
bool isGetter = false;
- if (_matchesKeyword(Keyword.GET) && !_tokenMatches(_peek(), TokenType.OPEN_PAREN)) {
+ if (_matchesKeyword(Keyword.GET) &&
+ !_tokenMatches(_peek(), TokenType.OPEN_PAREN)) {
keyword = andAdvance;
isGetter = true;
- } else if (_matchesKeyword(Keyword.SET) && !_tokenMatches(_peek(), TokenType.OPEN_PAREN)) {
+ } else if (_matchesKeyword(Keyword.SET) &&
+ !_tokenMatches(_peek(), TokenType.OPEN_PAREN)) {
keyword = andAdvance;
}
SimpleIdentifier name = parseSimpleIdentifier();
@@ -5082,7 +6503,8 @@ class Parser {
parameters = parseFormalParameterList();
_validateFormalParameterList(parameters);
} else {
- _reportErrorForCurrentToken(ParserErrorCode.MISSING_FUNCTION_PARAMETERS);
+ _reportErrorForCurrentToken(
+ ParserErrorCode.MISSING_FUNCTION_PARAMETERS);
}
} else if (_matches(TokenType.OPEN_PAREN)) {
_reportErrorForCurrentToken(ParserErrorCode.GETTER_WITH_PARAMETERS);
@@ -5090,16 +6512,24 @@ class Parser {
}
FunctionBody body;
if (externalKeyword == null) {
- body = _parseFunctionBody(false, ParserErrorCode.MISSING_FUNCTION_BODY, false);
+ body =
+ _parseFunctionBody(false, ParserErrorCode.MISSING_FUNCTION_BODY, false);
} else {
body = new EmptyFunctionBody(_expect(TokenType.SEMICOLON));
}
- // if (!isStatement && matches(TokenType.SEMICOLON)) {
- // // TODO(brianwilkerson) Improve this error message.
- // reportError(ParserErrorCode.UNEXPECTED_TOKEN, currentToken.getLexeme());
- // advance();
- // }
- return new FunctionDeclaration(commentAndMetadata.comment, commentAndMetadata.metadata, externalKeyword, returnType, keyword, name, new FunctionExpression(parameters, body));
+// if (!isStatement && matches(TokenType.SEMICOLON)) {
+// // TODO(brianwilkerson) Improve this error message.
+// reportError(ParserErrorCode.UNEXPECTED_TOKEN, currentToken.getLexeme());
+// advance();
+// }
+ return new FunctionDeclaration(
+ commentAndMetadata.comment,
+ commentAndMetadata.metadata,
+ externalKeyword,
+ returnType,
+ keyword,
+ name,
+ new FunctionExpression(parameters, body));
}
/**
@@ -5115,7 +6545,9 @@ class Parser {
Statement _parseFunctionDeclarationStatement() {
Modifiers modifiers = _parseModifiers();
_validateModifiersForFunctionDeclarationStatement(modifiers);
- return _parseFunctionDeclarationStatementAfterReturnType(_parseCommentAndMetadata(), _parseOptionalReturnType());
+ return _parseFunctionDeclarationStatementAfterReturnType(
+ _parseCommentAndMetadata(),
+ _parseOptionalReturnType());
}
/**
@@ -5131,14 +6563,21 @@ class Parser {
* @param returnType the return type, or `null` if there is no return type
* @return the function declaration statement that was parsed
*/
- Statement _parseFunctionDeclarationStatementAfterReturnType(CommentAndMetadata commentAndMetadata, TypeName returnType) {
- FunctionDeclaration declaration = _parseFunctionDeclaration(commentAndMetadata, null, returnType);
+ Statement
+ _parseFunctionDeclarationStatementAfterReturnType(CommentAndMetadata commentAndMetadata,
+ TypeName returnType) {
+ FunctionDeclaration declaration =
+ _parseFunctionDeclaration(commentAndMetadata, null, returnType);
Token propertyKeyword = declaration.propertyKeyword;
if (propertyKeyword != null) {
if ((propertyKeyword as KeywordToken).keyword == Keyword.GET) {
- _reportErrorForToken(ParserErrorCode.GETTER_IN_FUNCTION, propertyKeyword);
+ _reportErrorForToken(
+ ParserErrorCode.GETTER_IN_FUNCTION,
+ propertyKeyword);
} else {
- _reportErrorForToken(ParserErrorCode.SETTER_IN_FUNCTION, propertyKeyword);
+ _reportErrorForToken(
+ ParserErrorCode.SETTER_IN_FUNCTION,
+ propertyKeyword);
}
}
return new FunctionDeclarationStatement(declaration);
@@ -5159,7 +6598,8 @@ class Parser {
* @param keyword the token representing the 'typedef' keyword
* @return the function type alias that was parsed
*/
- FunctionTypeAlias _parseFunctionTypeAlias(CommentAndMetadata commentAndMetadata, Token keyword) {
+ FunctionTypeAlias
+ _parseFunctionTypeAlias(CommentAndMetadata commentAndMetadata, Token keyword) {
TypeName returnType = null;
if (hasReturnTypeInTypeAlias) {
returnType = parseReturnType();
@@ -5171,20 +6611,55 @@ class Parser {
}
if (_matches(TokenType.SEMICOLON) || _matches(TokenType.EOF)) {
_reportErrorForCurrentToken(ParserErrorCode.MISSING_TYPEDEF_PARAMETERS);
- FormalParameterList parameters = new FormalParameterList(_createSyntheticToken(TokenType.OPEN_PAREN), null, null, null, _createSyntheticToken(TokenType.CLOSE_PAREN));
+ FormalParameterList parameters = new FormalParameterList(
+ _createSyntheticToken(TokenType.OPEN_PAREN),
+ null,
+ null,
+ null,
+ _createSyntheticToken(TokenType.CLOSE_PAREN));
Token semicolon = _expect(TokenType.SEMICOLON);
- return new FunctionTypeAlias(commentAndMetadata.comment, commentAndMetadata.metadata, keyword, returnType, name, typeParameters, parameters, semicolon);
+ return new FunctionTypeAlias(
+ commentAndMetadata.comment,
+ commentAndMetadata.metadata,
+ keyword,
+ returnType,
+ name,
+ typeParameters,
+ parameters,
+ semicolon);
} else if (!_matches(TokenType.OPEN_PAREN)) {
_reportErrorForCurrentToken(ParserErrorCode.MISSING_TYPEDEF_PARAMETERS);
- // TODO(brianwilkerson) Recover from this error. At the very least we should skip to the start
- // of the next valid compilation unit member, allowing for the possibility of finding the
- // typedef parameters before that point.
- return new FunctionTypeAlias(commentAndMetadata.comment, commentAndMetadata.metadata, keyword, returnType, name, typeParameters, new FormalParameterList(_createSyntheticToken(TokenType.OPEN_PAREN), null, null, null, _createSyntheticToken(TokenType.CLOSE_PAREN)), _createSyntheticToken(TokenType.SEMICOLON));
+ // TODO(brianwilkerson) Recover from this error. At the very least we
+ // should skip to the start of the next valid compilation unit member,
+ // allowing for the possibility of finding the typedef parameters before
+ // that point.
+ return new FunctionTypeAlias(
+ commentAndMetadata.comment,
+ commentAndMetadata.metadata,
+ keyword,
+ returnType,
+ name,
+ typeParameters,
+ new FormalParameterList(
+ _createSyntheticToken(TokenType.OPEN_PAREN),
+ null,
+ null,
+ null,
+ _createSyntheticToken(TokenType.CLOSE_PAREN)),
+ _createSyntheticToken(TokenType.SEMICOLON));
}
FormalParameterList parameters = parseFormalParameterList();
_validateFormalParameterList(parameters);
Token semicolon = _expect(TokenType.SEMICOLON);
- return new FunctionTypeAlias(commentAndMetadata.comment, commentAndMetadata.metadata, keyword, returnType, name, typeParameters, parameters, semicolon);
+ return new FunctionTypeAlias(
+ commentAndMetadata.comment,
+ commentAndMetadata.metadata,
+ keyword,
+ returnType,
+ name,
+ typeParameters,
+ parameters,
+ semicolon);
}
/**
@@ -5206,19 +6681,34 @@ class Parser {
* type
* @return the getter that was parsed
*/
- MethodDeclaration _parseGetter(CommentAndMetadata commentAndMetadata, Token externalKeyword, Token staticKeyword, TypeName returnType) {
+ MethodDeclaration _parseGetter(CommentAndMetadata commentAndMetadata,
+ Token externalKeyword, Token staticKeyword, TypeName returnType) {
Token propertyKeyword = _expectKeyword(Keyword.GET);
SimpleIdentifier name = parseSimpleIdentifier();
- if (_matches(TokenType.OPEN_PAREN) && _tokenMatches(_peek(), TokenType.CLOSE_PAREN)) {
+ if (_matches(TokenType.OPEN_PAREN) &&
+ _tokenMatches(_peek(), TokenType.CLOSE_PAREN)) {
_reportErrorForCurrentToken(ParserErrorCode.GETTER_WITH_PARAMETERS);
_advance();
_advance();
}
- FunctionBody body = _parseFunctionBody(externalKeyword != null || staticKeyword == null, ParserErrorCode.STATIC_GETTER_WITHOUT_BODY, false);
+ FunctionBody body = _parseFunctionBody(
+ externalKeyword != null || staticKeyword == null,
+ ParserErrorCode.STATIC_GETTER_WITHOUT_BODY,
+ false);
if (externalKeyword != null && body is! EmptyFunctionBody) {
_reportErrorForCurrentToken(ParserErrorCode.EXTERNAL_GETTER_WITH_BODY);
}
- return new MethodDeclaration(commentAndMetadata.comment, commentAndMetadata.metadata, externalKeyword, staticKeyword, returnType, propertyKeyword, null, name, null, body);
+ return new MethodDeclaration(
+ commentAndMetadata.comment,
+ commentAndMetadata.metadata,
+ externalKeyword,
+ staticKeyword,
+ returnType,
+ propertyKeyword,
+ null,
+ name,
+ null,
+ body);
}
/**
@@ -5263,7 +6753,14 @@ class Parser {
elseKeyword = andAdvance;
elseStatement = parseStatement2();
}
- return new IfStatement(ifKeyword, leftParenthesis, condition, rightParenthesis, thenStatement, elseKeyword, elseStatement);
+ return new IfStatement(
+ ifKeyword,
+ leftParenthesis,
+ condition,
+ rightParenthesis,
+ thenStatement,
+ elseKeyword,
+ elseStatement);
}
/**
@@ -5287,7 +6784,8 @@ class Parser {
if (_parseDeferredLibraries) {
deferredToken = andAdvance;
} else {
- _reportErrorForCurrentToken(ParserErrorCode.DEFERRED_IMPORTS_NOT_SUPPORTED);
+ _reportErrorForCurrentToken(
+ ParserErrorCode.DEFERRED_IMPORTS_NOT_SUPPORTED);
_advance();
}
}
@@ -5295,11 +6793,21 @@ class Parser {
asToken = andAdvance;
prefix = parseSimpleIdentifier();
} else if (deferredToken != null) {
- _reportErrorForCurrentToken(ParserErrorCode.MISSING_PREFIX_IN_DEFERRED_IMPORT);
+ _reportErrorForCurrentToken(
+ ParserErrorCode.MISSING_PREFIX_IN_DEFERRED_IMPORT);
}
List<Combinator> combinators = _parseCombinators();
Token semicolon = _expectSemicolon();
- return new ImportDirective(commentAndMetadata.comment, commentAndMetadata.metadata, importKeyword, libraryUri, deferredToken, asToken, prefix, combinators, semicolon);
+ return new ImportDirective(
+ commentAndMetadata.comment,
+ commentAndMetadata.metadata,
+ importKeyword,
+ libraryUri,
+ deferredToken,
+ asToken,
+ prefix,
+ combinators,
+ semicolon);
}
/**
@@ -5325,9 +6833,17 @@ class Parser {
* @param type the type that has already been parsed, or `null` if 'var' was provided
* @return the getter that was parsed
*/
- FieldDeclaration _parseInitializedIdentifierList(CommentAndMetadata commentAndMetadata, Token staticKeyword, Token keyword, TypeName type) {
- VariableDeclarationList fieldList = _parseVariableDeclarationListAfterType(null, keyword, type);
- return new FieldDeclaration(commentAndMetadata.comment, commentAndMetadata.metadata, staticKeyword, fieldList, _expect(TokenType.SEMICOLON));
+ FieldDeclaration
+ _parseInitializedIdentifierList(CommentAndMetadata commentAndMetadata,
+ Token staticKeyword, Token keyword, TypeName type) {
+ VariableDeclarationList fieldList =
+ _parseVariableDeclarationListAfterType(null, keyword, type);
+ return new FieldDeclaration(
+ commentAndMetadata.comment,
+ commentAndMetadata.metadata,
+ staticKeyword,
+ fieldList,
+ _expect(TokenType.SEMICOLON));
}
/**
@@ -5344,7 +6860,10 @@ class Parser {
InstanceCreationExpression _parseInstanceCreationExpression(Token keyword) {
ConstructorName constructorName = parseConstructorName();
ArgumentList argumentList = parseArgumentList();
- return new InstanceCreationExpression(keyword, constructorName, argumentList);
+ return new InstanceCreationExpression(
+ keyword,
+ constructorName,
+ argumentList);
}
/**
@@ -5358,11 +6877,18 @@ class Parser {
* @param commentAndMetadata the metadata to be associated with the directive
* @return the library directive that was parsed
*/
- LibraryDirective _parseLibraryDirective(CommentAndMetadata commentAndMetadata) {
+ LibraryDirective
+ _parseLibraryDirective(CommentAndMetadata commentAndMetadata) {
Token keyword = _expectKeyword(Keyword.LIBRARY);
- LibraryIdentifier libraryName = _parseLibraryName(ParserErrorCode.MISSING_NAME_IN_LIBRARY_DIRECTIVE, keyword);
+ LibraryIdentifier libraryName =
+ _parseLibraryName(ParserErrorCode.MISSING_NAME_IN_LIBRARY_DIRECTIVE, keyword);
Token semicolon = _expect(TokenType.SEMICOLON);
- return new LibraryDirective(commentAndMetadata.comment, commentAndMetadata.metadata, keyword, libraryName, semicolon);
+ return new LibraryDirective(
+ commentAndMetadata.comment,
+ commentAndMetadata.metadata,
+ keyword,
+ libraryName,
+ semicolon);
}
/**
@@ -5378,12 +6904,14 @@ class Parser {
* missing
* @return the library name that was parsed
*/
- LibraryIdentifier _parseLibraryName(ParserErrorCode missingNameError, Token missingNameToken) {
+ LibraryIdentifier _parseLibraryName(ParserErrorCode missingNameError,
+ Token missingNameToken) {
if (_matchesIdentifier()) {
return parseLibraryIdentifier();
} else if (_matches(TokenType.STRING)) {
- // TODO(brianwilkerson) Recovery: This should be extended to handle arbitrary tokens until we
- // can find a token that can start a compilation unit member.
+ // TODO(brianwilkerson) Recovery: This should be extended to handle
+ // arbitrary tokens until we can find a token that can start a compilation
+ // unit member.
StringLiteral string = parseStringLiteral();
_reportErrorForNode(ParserErrorCode.NON_IDENTIFIER_LIBRARY_NAME, string);
} else {
@@ -5408,22 +6936,35 @@ class Parser {
* are no type arguments
* @return the list literal that was parsed
*/
- ListLiteral _parseListLiteral(Token modifier, TypeArgumentList typeArguments) {
+ ListLiteral _parseListLiteral(Token modifier,
+ TypeArgumentList typeArguments) {
// may be empty list literal
if (_matches(TokenType.INDEX)) {
- BeginToken leftBracket = new BeginToken(TokenType.OPEN_SQUARE_BRACKET, _currentToken.offset);
- Token rightBracket = new Token(TokenType.CLOSE_SQUARE_BRACKET, _currentToken.offset + 1);
+ BeginToken leftBracket =
+ new BeginToken(TokenType.OPEN_SQUARE_BRACKET, _currentToken.offset);
+ Token rightBracket =
+ new Token(TokenType.CLOSE_SQUARE_BRACKET, _currentToken.offset + 1);
leftBracket.endToken = rightBracket;
rightBracket.setNext(_currentToken.next);
leftBracket.setNext(rightBracket);
_currentToken.previous.setNext(leftBracket);
_currentToken = _currentToken.next;
- return new ListLiteral(modifier, typeArguments, leftBracket, null, rightBracket);
+ return new ListLiteral(
+ modifier,
+ typeArguments,
+ leftBracket,
+ null,
+ rightBracket);
}
// open
Token leftBracket = _expect(TokenType.OPEN_SQUARE_BRACKET);
if (_matches(TokenType.CLOSE_SQUARE_BRACKET)) {
- return new ListLiteral(modifier, typeArguments, leftBracket, null, andAdvance);
+ return new ListLiteral(
+ modifier,
+ typeArguments,
+ leftBracket,
+ null,
+ andAdvance);
}
bool wasInInitializer = _inInitializer;
_inInitializer = false;
@@ -5432,12 +6973,22 @@ class Parser {
elements.add(parseExpression2());
while (_optional(TokenType.COMMA)) {
if (_matches(TokenType.CLOSE_SQUARE_BRACKET)) {
- return new ListLiteral(modifier, typeArguments, leftBracket, elements, andAdvance);
+ return new ListLiteral(
+ modifier,
+ typeArguments,
+ leftBracket,
+ elements,
+ andAdvance);
}
elements.add(parseExpression2());
}
Token rightBracket = _expect(TokenType.CLOSE_SQUARE_BRACKET);
- return new ListLiteral(modifier, typeArguments, leftBracket, elements, rightBracket);
+ return new ListLiteral(
+ modifier,
+ typeArguments,
+ leftBracket,
+ elements,
+ rightBracket);
} finally {
_inInitializer = wasInInitializer;
}
@@ -5463,11 +7014,17 @@ class Parser {
}
if (_matches(TokenType.OPEN_CURLY_BRACKET)) {
return _parseMapLiteral(modifier, typeArguments);
- } else if (_matches(TokenType.OPEN_SQUARE_BRACKET) || _matches(TokenType.INDEX)) {
+ } else if (_matches(TokenType.OPEN_SQUARE_BRACKET) ||
+ _matches(TokenType.INDEX)) {
return _parseListLiteral(modifier, typeArguments);
}
_reportErrorForCurrentToken(ParserErrorCode.EXPECTED_LIST_OR_MAP_LITERAL);
- return new ListLiteral(modifier, typeArguments, _createSyntheticToken(TokenType.OPEN_SQUARE_BRACKET), null, _createSyntheticToken(TokenType.CLOSE_SQUARE_BRACKET));
+ return new ListLiteral(
+ modifier,
+ typeArguments,
+ _createSyntheticToken(TokenType.OPEN_SQUARE_BRACKET),
+ null,
+ _createSyntheticToken(TokenType.CLOSE_SQUARE_BRACKET));
}
/**
@@ -5484,7 +7041,8 @@ class Parser {
Expression expression = _parseEqualityExpression();
while (_matches(TokenType.AMPERSAND_AMPERSAND)) {
Token operator = andAdvance;
- expression = new BinaryExpression(expression, operator, _parseEqualityExpression());
+ expression =
+ new BinaryExpression(expression, operator, _parseEqualityExpression());
}
return expression;
}
@@ -5507,7 +7065,12 @@ class Parser {
Token leftBracket = _expect(TokenType.OPEN_CURLY_BRACKET);
List<MapLiteralEntry> entries = new List<MapLiteralEntry>();
if (_matches(TokenType.CLOSE_CURLY_BRACKET)) {
- return new MapLiteral(modifier, typeArguments, leftBracket, entries, andAdvance);
+ return new MapLiteral(
+ modifier,
+ typeArguments,
+ leftBracket,
+ entries,
+ andAdvance);
}
bool wasInInitializer = _inInitializer;
_inInitializer = false;
@@ -5515,12 +7078,22 @@ class Parser {
entries.add(parseMapLiteralEntry());
while (_optional(TokenType.COMMA)) {
if (_matches(TokenType.CLOSE_CURLY_BRACKET)) {
- return new MapLiteral(modifier, typeArguments, leftBracket, entries, andAdvance);
+ return new MapLiteral(
+ modifier,
+ typeArguments,
+ leftBracket,
+ entries,
+ andAdvance);
}
entries.add(parseMapLiteralEntry());
}
Token rightBracket = _expect(TokenType.CLOSE_CURLY_BRACKET);
- return new MapLiteral(modifier, typeArguments, leftBracket, entries, rightBracket);
+ return new MapLiteral(
+ modifier,
+ typeArguments,
+ leftBracket,
+ entries,
+ rightBracket);
} finally {
_inInitializer = wasInInitializer;
}
@@ -5544,8 +7117,14 @@ class Parser {
* @param parameters the parameters to the method
* @return the method declaration that was parsed
*/
- MethodDeclaration _parseMethodDeclarationAfterParameters(CommentAndMetadata commentAndMetadata, Token externalKeyword, Token staticKeyword, TypeName returnType, SimpleIdentifier name, FormalParameterList parameters) {
- FunctionBody body = _parseFunctionBody(externalKeyword != null || staticKeyword == null, ParserErrorCode.MISSING_FUNCTION_BODY, false);
+ MethodDeclaration
+ _parseMethodDeclarationAfterParameters(CommentAndMetadata commentAndMetadata,
+ Token externalKeyword, Token staticKeyword, TypeName returnType,
+ SimpleIdentifier name, FormalParameterList parameters) {
+ FunctionBody body = _parseFunctionBody(
+ externalKeyword != null || staticKeyword == null,
+ ParserErrorCode.MISSING_FUNCTION_BODY,
+ false);
if (externalKeyword != null) {
if (body is! EmptyFunctionBody) {
_reportErrorForNode(ParserErrorCode.EXTERNAL_METHOD_WITH_BODY, body);
@@ -5555,7 +7134,17 @@ class Parser {
_reportErrorForNode(ParserErrorCode.ABSTRACT_STATIC_METHOD, body);
}
}
- return new MethodDeclaration(commentAndMetadata.comment, commentAndMetadata.metadata, externalKeyword, staticKeyword, returnType, null, null, name, parameters, body);
+ return new MethodDeclaration(
+ commentAndMetadata.comment,
+ commentAndMetadata.metadata,
+ externalKeyword,
+ staticKeyword,
+ returnType,
+ null,
+ null,
+ name,
+ parameters,
+ body);
}
/**
@@ -5574,11 +7163,19 @@ class Parser {
* @param returnType the return type of the method
* @return the method declaration that was parsed
*/
- MethodDeclaration _parseMethodDeclarationAfterReturnType(CommentAndMetadata commentAndMetadata, Token externalKeyword, Token staticKeyword, TypeName returnType) {
+ MethodDeclaration
+ _parseMethodDeclarationAfterReturnType(CommentAndMetadata commentAndMetadata,
+ Token externalKeyword, Token staticKeyword, TypeName returnType) {
SimpleIdentifier methodName = parseSimpleIdentifier();
FormalParameterList parameters = parseFormalParameterList();
_validateFormalParameterList(parameters);
- return _parseMethodDeclarationAfterParameters(commentAndMetadata, externalKeyword, staticKeyword, returnType, methodName, parameters);
+ return _parseMethodDeclarationAfterParameters(
+ commentAndMetadata,
+ externalKeyword,
+ staticKeyword,
+ returnType,
+ methodName,
+ parameters);
}
/**
@@ -5598,54 +7195,76 @@ class Parser {
Modifiers modifiers = new Modifiers();
bool progress = true;
while (progress) {
- if (_tokenMatches(_peek(), TokenType.PERIOD) || _tokenMatches(_peek(), TokenType.LT) || _tokenMatches(_peek(), TokenType.OPEN_PAREN)) {
+ if (_tokenMatches(_peek(), TokenType.PERIOD) ||
+ _tokenMatches(_peek(), TokenType.LT) ||
+ _tokenMatches(_peek(), TokenType.OPEN_PAREN)) {
return modifiers;
}
if (_matchesKeyword(Keyword.ABSTRACT)) {
if (modifiers.abstractKeyword != null) {
- _reportErrorForCurrentToken(ParserErrorCode.DUPLICATED_MODIFIER, [_currentToken.lexeme]);
+ _reportErrorForCurrentToken(
+ ParserErrorCode.DUPLICATED_MODIFIER,
+ [_currentToken.lexeme]);
_advance();
} else {
modifiers.abstractKeyword = andAdvance;
}
} else if (_matchesKeyword(Keyword.CONST)) {
if (modifiers.constKeyword != null) {
- _reportErrorForCurrentToken(ParserErrorCode.DUPLICATED_MODIFIER, [_currentToken.lexeme]);
+ _reportErrorForCurrentToken(
+ ParserErrorCode.DUPLICATED_MODIFIER,
+ [_currentToken.lexeme]);
_advance();
} else {
modifiers.constKeyword = andAdvance;
}
- } else if (_matchesKeyword(Keyword.EXTERNAL) && !_tokenMatches(_peek(), TokenType.PERIOD) && !_tokenMatches(_peek(), TokenType.LT)) {
+ } else if (_matchesKeyword(Keyword.EXTERNAL) &&
+ !_tokenMatches(_peek(), TokenType.PERIOD) &&
+ !_tokenMatches(_peek(), TokenType.LT)) {
if (modifiers.externalKeyword != null) {
- _reportErrorForCurrentToken(ParserErrorCode.DUPLICATED_MODIFIER, [_currentToken.lexeme]);
+ _reportErrorForCurrentToken(
+ ParserErrorCode.DUPLICATED_MODIFIER,
+ [_currentToken.lexeme]);
_advance();
} else {
modifiers.externalKeyword = andAdvance;
}
- } else if (_matchesKeyword(Keyword.FACTORY) && !_tokenMatches(_peek(), TokenType.PERIOD) && !_tokenMatches(_peek(), TokenType.LT)) {
+ } else if (_matchesKeyword(Keyword.FACTORY) &&
+ !_tokenMatches(_peek(), TokenType.PERIOD) &&
+ !_tokenMatches(_peek(), TokenType.LT)) {
if (modifiers.factoryKeyword != null) {
- _reportErrorForCurrentToken(ParserErrorCode.DUPLICATED_MODIFIER, [_currentToken.lexeme]);
+ _reportErrorForCurrentToken(
+ ParserErrorCode.DUPLICATED_MODIFIER,
+ [_currentToken.lexeme]);
_advance();
} else {
modifiers.factoryKeyword = andAdvance;
}
} else if (_matchesKeyword(Keyword.FINAL)) {
if (modifiers.finalKeyword != null) {
- _reportErrorForCurrentToken(ParserErrorCode.DUPLICATED_MODIFIER, [_currentToken.lexeme]);
+ _reportErrorForCurrentToken(
+ ParserErrorCode.DUPLICATED_MODIFIER,
+ [_currentToken.lexeme]);
_advance();
} else {
modifiers.finalKeyword = andAdvance;
}
- } else if (_matchesKeyword(Keyword.STATIC) && !_tokenMatches(_peek(), TokenType.PERIOD) && !_tokenMatches(_peek(), TokenType.LT)) {
+ } else if (_matchesKeyword(Keyword.STATIC) &&
+ !_tokenMatches(_peek(), TokenType.PERIOD) &&
+ !_tokenMatches(_peek(), TokenType.LT)) {
if (modifiers.staticKeyword != null) {
- _reportErrorForCurrentToken(ParserErrorCode.DUPLICATED_MODIFIER, [_currentToken.lexeme]);
+ _reportErrorForCurrentToken(
+ ParserErrorCode.DUPLICATED_MODIFIER,
+ [_currentToken.lexeme]);
_advance();
} else {
modifiers.staticKeyword = andAdvance;
}
} else if (_matchesKeyword(Keyword.VAR)) {
if (modifiers.varKeyword != null) {
- _reportErrorForCurrentToken(ParserErrorCode.DUPLICATED_MODIFIER, [_currentToken.lexeme]);
+ _reportErrorForCurrentToken(
+ ParserErrorCode.DUPLICATED_MODIFIER,
+ [_currentToken.lexeme]);
_advance();
} else {
modifiers.varKeyword = andAdvance;
@@ -5670,14 +7289,16 @@ class Parser {
*/
Expression _parseMultiplicativeExpression() {
Expression expression;
- if (_matchesKeyword(Keyword.SUPER) && _currentToken.next.type.isMultiplicativeOperator) {
+ if (_matchesKeyword(Keyword.SUPER) &&
+ _currentToken.next.type.isMultiplicativeOperator) {
expression = new SuperExpression(andAdvance);
} else {
expression = _parseUnaryExpression();
}
while (_currentToken.type.isMultiplicativeOperator) {
Token operator = andAdvance;
- expression = new BinaryExpression(expression, operator, _parseUnaryExpression());
+ expression =
+ new BinaryExpression(expression, operator, _parseUnaryExpression());
}
return expression;
}
@@ -5708,7 +7329,8 @@ class Parser {
*
* @return the new expression that was parsed
*/
- InstanceCreationExpression _parseNewExpression() => _parseInstanceCreationExpression(_expectKeyword(Keyword.NEW));
+ InstanceCreationExpression _parseNewExpression() =>
+ _parseInstanceCreationExpression(_expectKeyword(Keyword.NEW));
/**
* Parse a non-labeled statement.
@@ -5740,13 +7362,17 @@ class Parser {
if (_tokenMatches(_peek(), TokenType.STRING)) {
Token afterString = _skipStringLiteral(_currentToken.next);
if (afterString != null && afterString.type == TokenType.COLON) {
- return new ExpressionStatement(parseExpression2(), _expect(TokenType.SEMICOLON));
+ return new ExpressionStatement(
+ parseExpression2(),
+ _expect(TokenType.SEMICOLON));
}
}
return parseBlock();
- } else if (_matches(TokenType.KEYWORD) && !(_currentToken as KeywordToken).keyword.isPseudoKeyword) {
+ } else if (_matches(TokenType.KEYWORD) &&
+ !(_currentToken as KeywordToken).keyword.isPseudoKeyword) {
Keyword keyword = (_currentToken as KeywordToken).keyword;
- // TODO(jwren) compute some metrics to figure out a better order for this if-then sequence to optimize performance
+ // TODO(jwren) compute some metrics to figure out a better order for this
+ // if-then sequence to optimize performance
if (keyword == Keyword.ASSERT) {
return _parseAssertStatement();
} else if (keyword == Keyword.BREAK) {
@@ -5760,67 +7386,94 @@ class Parser {
} else if (keyword == Keyword.IF) {
return _parseIfStatement();
} else if (keyword == Keyword.RETHROW) {
- return new ExpressionStatement(_parseRethrowExpression(), _expect(TokenType.SEMICOLON));
+ return new ExpressionStatement(
+ _parseRethrowExpression(),
+ _expect(TokenType.SEMICOLON));
} else if (keyword == Keyword.RETURN) {
return _parseReturnStatement();
} else if (keyword == Keyword.SWITCH) {
return _parseSwitchStatement();
} else if (keyword == Keyword.THROW) {
- return new ExpressionStatement(_parseThrowExpression(), _expect(TokenType.SEMICOLON));
+ return new ExpressionStatement(
+ _parseThrowExpression(),
+ _expect(TokenType.SEMICOLON));
} else if (keyword == Keyword.TRY) {
return _parseTryStatement();
} else if (keyword == Keyword.WHILE) {
return _parseWhileStatement();
} else if (keyword == Keyword.VAR || keyword == Keyword.FINAL) {
- return _parseVariableDeclarationStatementAfterMetadata(commentAndMetadata);
+ return _parseVariableDeclarationStatementAfterMetadata(
+ commentAndMetadata);
} else if (keyword == Keyword.VOID) {
TypeName returnType = parseReturnType();
- if (_matchesIdentifier() && _peek().matchesAny([
- TokenType.OPEN_PAREN,
- TokenType.OPEN_CURLY_BRACKET,
- TokenType.FUNCTION])) {
- return _parseFunctionDeclarationStatementAfterReturnType(commentAndMetadata, returnType);
+ if (_matchesIdentifier() &&
+ _peek().matchesAny(
+ [TokenType.OPEN_PAREN, TokenType.OPEN_CURLY_BRACKET, TokenType.FUNCTION])) {
+ return _parseFunctionDeclarationStatementAfterReturnType(
+ commentAndMetadata,
+ returnType);
} else {
//
// We have found an error of some kind. Try to recover.
//
if (_matchesIdentifier()) {
- if (_peek().matchesAny([TokenType.EQ, TokenType.COMMA, TokenType.SEMICOLON])) {
+ if (_peek().matchesAny(
+ [TokenType.EQ, TokenType.COMMA, TokenType.SEMICOLON])) {
//
// We appear to have a variable declaration with a type of "void".
//
_reportErrorForNode(ParserErrorCode.VOID_VARIABLE, returnType);
- return _parseVariableDeclarationStatementAfterMetadata(commentAndMetadata);
+ return _parseVariableDeclarationStatementAfterMetadata(
+ commentAndMetadata);
}
} else if (_matches(TokenType.CLOSE_CURLY_BRACKET)) {
//
- // We appear to have found an incomplete statement at the end of a block. Parse it as a
- // variable declaration.
+ // We appear to have found an incomplete statement at the end of a
+ // block. Parse it as a variable declaration.
//
- return _parseVariableDeclarationStatementAfterType(commentAndMetadata, null, returnType);
+ return _parseVariableDeclarationStatementAfterType(
+ commentAndMetadata,
+ null,
+ returnType);
}
_reportErrorForCurrentToken(ParserErrorCode.MISSING_STATEMENT);
// TODO(brianwilkerson) Recover from this error.
return new EmptyStatement(_createSyntheticToken(TokenType.SEMICOLON));
}
} else if (keyword == Keyword.CONST) {
- if (_peek().matchesAny([
- TokenType.LT,
- TokenType.OPEN_CURLY_BRACKET,
- TokenType.OPEN_SQUARE_BRACKET,
- TokenType.INDEX])) {
- return new ExpressionStatement(parseExpression2(), _expect(TokenType.SEMICOLON));
+ if (_peek().matchesAny(
+ [
+ TokenType.LT,
+ TokenType.OPEN_CURLY_BRACKET,
+ TokenType.OPEN_SQUARE_BRACKET,
+ TokenType.INDEX])) {
+ return new ExpressionStatement(
+ parseExpression2(),
+ _expect(TokenType.SEMICOLON));
} else if (_tokenMatches(_peek(), TokenType.IDENTIFIER)) {
Token afterType = _skipTypeName(_peek());
if (afterType != null) {
- if (_tokenMatches(afterType, TokenType.OPEN_PAREN) || (_tokenMatches(afterType, TokenType.PERIOD) && _tokenMatches(afterType.next, TokenType.IDENTIFIER) && _tokenMatches(afterType.next.next, TokenType.OPEN_PAREN))) {
- return new ExpressionStatement(parseExpression2(), _expect(TokenType.SEMICOLON));
+ if (_tokenMatches(afterType, TokenType.OPEN_PAREN) ||
+ (_tokenMatches(afterType, TokenType.PERIOD) &&
+ _tokenMatches(afterType.next, TokenType.IDENTIFIER) &&
+ _tokenMatches(afterType.next.next, TokenType.OPEN_PAREN))) {
+ return new ExpressionStatement(
+ parseExpression2(),
+ _expect(TokenType.SEMICOLON));
}
}
}
- return _parseVariableDeclarationStatementAfterMetadata(commentAndMetadata);
- } else if (keyword == Keyword.NEW || keyword == Keyword.TRUE || keyword == Keyword.FALSE || keyword == Keyword.NULL || keyword == Keyword.SUPER || keyword == Keyword.THIS) {
- return new ExpressionStatement(parseExpression2(), _expect(TokenType.SEMICOLON));
+ return _parseVariableDeclarationStatementAfterMetadata(
+ commentAndMetadata);
+ } else if (keyword == Keyword.NEW ||
+ keyword == Keyword.TRUE ||
+ keyword == Keyword.FALSE ||
+ keyword == Keyword.NULL ||
+ keyword == Keyword.SUPER ||
+ keyword == Keyword.THIS) {
+ return new ExpressionStatement(
+ parseExpression2(),
+ _expect(TokenType.SEMICOLON));
} else {
//
// We have found an error of some kind. Try to recover.
@@ -5834,25 +7487,33 @@ class Parser {
if (_tokenMatchesKeyword(_peek(), Keyword.FOR)) {
return _parseForStatement();
}
- return new ExpressionStatement(parseExpression2(), _expect(TokenType.SEMICOLON));
- } else if (_matchesString(_AWAIT) && _tokenMatchesKeyword(_peek(), Keyword.FOR)) {
+ return new ExpressionStatement(
+ parseExpression2(),
+ _expect(TokenType.SEMICOLON));
+ } else if (_matchesString(_AWAIT) &&
+ _tokenMatchesKeyword(_peek(), Keyword.FOR)) {
Token awaitToken = _currentToken;
Statement statement = _parseForStatement();
if (statement is! ForStatement) {
- _reportErrorForToken(CompileTimeErrorCode.ASYNC_FOR_IN_WRONG_CONTEXT, awaitToken);
+ _reportErrorForToken(
+ CompileTimeErrorCode.ASYNC_FOR_IN_WRONG_CONTEXT,
+ awaitToken);
}
return statement;
} else if (_matches(TokenType.SEMICOLON)) {
return _parseEmptyStatement();
} else if (_isInitializedVariableDeclaration()) {
- return _parseVariableDeclarationStatementAfterMetadata(commentAndMetadata);
+ return _parseVariableDeclarationStatementAfterMetadata(
+ commentAndMetadata);
} else if (_isFunctionDeclaration()) {
return _parseFunctionDeclarationStatement();
} else if (_matches(TokenType.CLOSE_CURLY_BRACKET)) {
_reportErrorForCurrentToken(ParserErrorCode.MISSING_STATEMENT);
return new EmptyStatement(_createSyntheticToken(TokenType.SEMICOLON));
} else {
- return new ExpressionStatement(parseExpression2(), _expect(TokenType.SEMICOLON));
+ return new ExpressionStatement(
+ parseExpression2(),
+ _expect(TokenType.SEMICOLON));
}
}
@@ -5874,32 +7535,52 @@ class Parser {
* type
* @return the operator declaration that was parsed
*/
- MethodDeclaration _parseOperator(CommentAndMetadata commentAndMetadata, Token externalKeyword, TypeName returnType) {
+ MethodDeclaration _parseOperator(CommentAndMetadata commentAndMetadata,
+ Token externalKeyword, TypeName returnType) {
Token operatorKeyword;
if (_matchesKeyword(Keyword.OPERATOR)) {
operatorKeyword = andAdvance;
} else {
- _reportErrorForToken(ParserErrorCode.MISSING_KEYWORD_OPERATOR, _currentToken);
+ _reportErrorForToken(
+ ParserErrorCode.MISSING_KEYWORD_OPERATOR,
+ _currentToken);
operatorKeyword = _createSyntheticKeyword(Keyword.OPERATOR);
}
if (!_currentToken.isUserDefinableOperator) {
- _reportErrorForCurrentToken(ParserErrorCode.NON_USER_DEFINABLE_OPERATOR, [_currentToken.lexeme]);
+ _reportErrorForCurrentToken(
+ ParserErrorCode.NON_USER_DEFINABLE_OPERATOR,
+ [_currentToken.lexeme]);
}
SimpleIdentifier name = new SimpleIdentifier(andAdvance);
if (_matches(TokenType.EQ)) {
Token previous = _currentToken.previous;
- if ((_tokenMatches(previous, TokenType.EQ_EQ) || _tokenMatches(previous, TokenType.BANG_EQ)) && _currentToken.offset == previous.offset + 2) {
- _reportErrorForCurrentToken(ParserErrorCode.INVALID_OPERATOR, ["${previous.lexeme}${_currentToken.lexeme}"]);
+ if ((_tokenMatches(previous, TokenType.EQ_EQ) ||
+ _tokenMatches(previous, TokenType.BANG_EQ)) &&
+ _currentToken.offset == previous.offset + 2) {
+ _reportErrorForCurrentToken(
+ ParserErrorCode.INVALID_OPERATOR,
+ ["${previous.lexeme}${_currentToken.lexeme}"]);
_advance();
}
}
FormalParameterList parameters = parseFormalParameterList();
_validateFormalParameterList(parameters);
- FunctionBody body = _parseFunctionBody(true, ParserErrorCode.MISSING_FUNCTION_BODY, false);
+ FunctionBody body =
+ _parseFunctionBody(true, ParserErrorCode.MISSING_FUNCTION_BODY, false);
if (externalKeyword != null && body is! EmptyFunctionBody) {
_reportErrorForCurrentToken(ParserErrorCode.EXTERNAL_OPERATOR_WITH_BODY);
}
- return new MethodDeclaration(commentAndMetadata.comment, commentAndMetadata.metadata, externalKeyword, null, returnType, null, operatorKeyword, name, parameters, body);
+ return new MethodDeclaration(
+ commentAndMetadata.comment,
+ commentAndMetadata.metadata,
+ externalKeyword,
+ null,
+ returnType,
+ null,
+ operatorKeyword,
+ name,
+ parameters,
+ body);
}
/**
@@ -5910,9 +7591,17 @@ class Parser {
TypeName _parseOptionalReturnType() {
if (_matchesKeyword(Keyword.VOID)) {
return parseReturnType();
- } else if (_matchesIdentifier() && !_matchesKeyword(Keyword.GET) && !_matchesKeyword(Keyword.SET) && !_matchesKeyword(Keyword.OPERATOR) && (_tokenMatchesIdentifier(_peek()) || _tokenMatches(_peek(), TokenType.LT))) {
+ } else if (_matchesIdentifier() &&
+ !_matchesKeyword(Keyword.GET) &&
+ !_matchesKeyword(Keyword.SET) &&
+ !_matchesKeyword(Keyword.OPERATOR) &&
+ (_tokenMatchesIdentifier(_peek()) || _tokenMatches(_peek(), TokenType.LT))) {
return parseReturnType();
- } else if (_matchesIdentifier() && _tokenMatches(_peek(), TokenType.PERIOD) && _tokenMatchesIdentifier(_peekAt(2)) && (_tokenMatchesIdentifier(_peekAt(3)) || _tokenMatches(_peekAt(3), TokenType.LT))) {
+ } else if (_matchesIdentifier() &&
+ _tokenMatches(_peek(), TokenType.PERIOD) &&
+ _tokenMatchesIdentifier(_peekAt(2)) &&
+ (_tokenMatchesIdentifier(_peekAt(3)) ||
+ _tokenMatches(_peekAt(3), TokenType.LT))) {
return parseReturnType();
}
return null;
@@ -5936,13 +7625,26 @@ class Parser {
Token partKeyword = _expectKeyword(Keyword.PART);
if (_matchesString(_OF)) {
Token ofKeyword = andAdvance;
- LibraryIdentifier libraryName = _parseLibraryName(ParserErrorCode.MISSING_NAME_IN_PART_OF_DIRECTIVE, ofKeyword);
+ LibraryIdentifier libraryName = _parseLibraryName(
+ ParserErrorCode.MISSING_NAME_IN_PART_OF_DIRECTIVE,
+ ofKeyword);
Token semicolon = _expect(TokenType.SEMICOLON);
- return new PartOfDirective(commentAndMetadata.comment, commentAndMetadata.metadata, partKeyword, ofKeyword, libraryName, semicolon);
+ return new PartOfDirective(
+ commentAndMetadata.comment,
+ commentAndMetadata.metadata,
+ partKeyword,
+ ofKeyword,
+ libraryName,
+ semicolon);
}
StringLiteral partUri = parseStringLiteral();
Token semicolon = _expect(TokenType.SEMICOLON);
- return new PartDirective(commentAndMetadata.comment, commentAndMetadata.metadata, partKeyword, partUri, semicolon);
+ return new PartDirective(
+ commentAndMetadata.comment,
+ commentAndMetadata.metadata,
+ partKeyword,
+ partUri,
+ semicolon);
}
/**
@@ -5962,20 +7664,28 @@ class Parser {
*/
Expression _parsePostfixExpression() {
Expression operand = _parseAssignableExpression(true);
- if (_matches(TokenType.OPEN_SQUARE_BRACKET) || _matches(TokenType.PERIOD) || _matches(TokenType.OPEN_PAREN)) {
+ if (_matches(TokenType.OPEN_SQUARE_BRACKET) ||
+ _matches(TokenType.PERIOD) ||
+ _matches(TokenType.OPEN_PAREN)) {
do {
if (_matches(TokenType.OPEN_PAREN)) {
ArgumentList argumentList = parseArgumentList();
if (operand is PropertyAccess) {
PropertyAccess access = operand as PropertyAccess;
- operand = new MethodInvocation(access.target, access.operator, access.propertyName, argumentList);
+ operand = new MethodInvocation(
+ access.target,
+ access.operator,
+ access.propertyName,
+ argumentList);
} else {
operand = new FunctionExpressionInvocation(operand, argumentList);
}
} else {
operand = _parseAssignableSelector(operand, true);
}
- } while (_matches(TokenType.OPEN_SQUARE_BRACKET) || _matches(TokenType.PERIOD) || _matches(TokenType.OPEN_PAREN));
+ } while (_matches(TokenType.OPEN_SQUARE_BRACKET) ||
+ _matches(TokenType.PERIOD) ||
+ _matches(TokenType.OPEN_PAREN));
return operand;
}
if (!_currentToken.type.isIncrementOperator) {
@@ -6055,19 +7765,21 @@ class Parser {
return parseStringLiteral();
} else if (_matches(TokenType.OPEN_CURLY_BRACKET)) {
return _parseMapLiteral(null, null);
- } else if (_matches(TokenType.OPEN_SQUARE_BRACKET) || _matches(TokenType.INDEX)) {
+ } else if (_matches(TokenType.OPEN_SQUARE_BRACKET) ||
+ _matches(TokenType.INDEX)) {
return _parseListLiteral(null, null);
} else if (_matchesIdentifier()) {
- // TODO(brianwilkerson) The code below was an attempt to recover from an error case, but it
- // needs to be applied as a recovery only after we know that parsing it as an identifier
- // doesn't work. Leaving the code as a reminder of how to recover.
- // if (isFunctionExpression(peek())) {
- // //
- // // Function expressions were allowed to have names at one point, but this is now illegal.
- // //
- // reportError(ParserErrorCode.NAMED_FUNCTION_EXPRESSION, getAndAdvance());
- // return parseFunctionExpression();
- // }
+ // TODO(brianwilkerson) The code below was an attempt to recover from an
+ // error case, but it needs to be applied as a recovery only after we
+ // know that parsing it as an identifier doesn't work. Leaving the code as
+ // a reminder of how to recover.
+// if (isFunctionExpression(peek())) {
+// //
+// // Function expressions were allowed to have names at one point, but this is now illegal.
+// //
+// reportError(ParserErrorCode.NAMED_FUNCTION_EXPRESSION, getAndAdvance());
+// return parseFunctionExpression();
+// }
return parsePrefixedIdentifier();
} else if (_matchesKeyword(Keyword.NEW)) {
return _parseNewExpression();
@@ -6083,22 +7795,31 @@ class Parser {
try {
Expression expression = parseExpression2();
Token rightParenthesis = _expect(TokenType.CLOSE_PAREN);
- return new ParenthesizedExpression(leftParenthesis, expression, rightParenthesis);
+ return new ParenthesizedExpression(
+ leftParenthesis,
+ expression,
+ rightParenthesis);
} finally {
_inInitializer = wasInInitializer;
}
} else if (_matches(TokenType.LT)) {
return _parseListOrMapLiteral(null);
- } else if (_matches(TokenType.QUESTION) && _tokenMatches(_peek(), TokenType.IDENTIFIER)) {
- _reportErrorForCurrentToken(ParserErrorCode.UNEXPECTED_TOKEN, [_currentToken.lexeme]);
+ } else if (_matches(TokenType.QUESTION) &&
+ _tokenMatches(_peek(), TokenType.IDENTIFIER)) {
+ _reportErrorForCurrentToken(
+ ParserErrorCode.UNEXPECTED_TOKEN,
+ [_currentToken.lexeme]);
_advance();
return _parsePrimaryExpression();
} else if (_matchesKeyword(Keyword.VOID)) {
//
- // Recover from having a return type of "void" where a return type is not expected.
+ // Recover from having a return type of "void" where a return type is not
+ // expected.
//
// TODO(brianwilkerson) Improve this error message.
- _reportErrorForCurrentToken(ParserErrorCode.UNEXPECTED_TOKEN, [_currentToken.lexeme]);
+ _reportErrorForCurrentToken(
+ ParserErrorCode.UNEXPECTED_TOKEN,
+ [_currentToken.lexeme]);
_advance();
return _parsePrimaryExpression();
} else if (_matches(TokenType.HASH)) {
@@ -6128,7 +7849,11 @@ class Parser {
constructorName = parseSimpleIdentifier();
}
ArgumentList argumentList = parseArgumentList();
- return new RedirectingConstructorInvocation(keyword, period, constructorName, argumentList);
+ return new RedirectingConstructorInvocation(
+ keyword,
+ period,
+ constructorName,
+ argumentList);
}
/**
@@ -6143,10 +7868,12 @@ class Parser {
* @return the relational expression that was parsed
*/
Expression _parseRelationalExpression() {
- if (_matchesKeyword(Keyword.SUPER) && _currentToken.next.type.isRelationalOperator) {
+ if (_matchesKeyword(Keyword.SUPER) &&
+ _currentToken.next.type.isRelationalOperator) {
Expression expression = new SuperExpression(andAdvance);
Token operator = andAdvance;
- expression = new BinaryExpression(expression, operator, parseBitwiseOrExpression());
+ expression =
+ new BinaryExpression(expression, operator, parseBitwiseOrExpression());
return expression;
}
Expression expression = parseBitwiseOrExpression();
@@ -6159,10 +7886,12 @@ class Parser {
if (_matches(TokenType.BANG)) {
notOperator = andAdvance;
}
- expression = new IsExpression(expression, isOperator, notOperator, parseTypeName());
+ expression =
+ new IsExpression(expression, isOperator, notOperator, parseTypeName());
} else if (_currentToken.type.isRelationalOperator) {
Token operator = andAdvance;
- expression = new BinaryExpression(expression, operator, parseBitwiseOrExpression());
+ expression =
+ new BinaryExpression(expression, operator, parseBitwiseOrExpression());
}
return expression;
}
@@ -6177,7 +7906,8 @@ class Parser {
*
* @return the rethrow expression that was parsed
*/
- Expression _parseRethrowExpression() => new RethrowExpression(_expectKeyword(Keyword.RETHROW));
+ Expression _parseRethrowExpression() =>
+ new RethrowExpression(_expectKeyword(Keyword.RETHROW));
/**
* Parse a return statement.
@@ -6218,16 +7948,30 @@ class Parser {
* type
* @return the setter that was parsed
*/
- MethodDeclaration _parseSetter(CommentAndMetadata commentAndMetadata, Token externalKeyword, Token staticKeyword, TypeName returnType) {
+ MethodDeclaration _parseSetter(CommentAndMetadata commentAndMetadata,
+ Token externalKeyword, Token staticKeyword, TypeName returnType) {
Token propertyKeyword = _expectKeyword(Keyword.SET);
SimpleIdentifier name = parseSimpleIdentifier();
FormalParameterList parameters = parseFormalParameterList();
_validateFormalParameterList(parameters);
- FunctionBody body = _parseFunctionBody(externalKeyword != null || staticKeyword == null, ParserErrorCode.STATIC_SETTER_WITHOUT_BODY, false);
+ FunctionBody body = _parseFunctionBody(
+ externalKeyword != null || staticKeyword == null,
+ ParserErrorCode.STATIC_SETTER_WITHOUT_BODY,
+ false);
if (externalKeyword != null && body is! EmptyFunctionBody) {
_reportErrorForCurrentToken(ParserErrorCode.EXTERNAL_SETTER_WITH_BODY);
}
- return new MethodDeclaration(commentAndMetadata.comment, commentAndMetadata.metadata, externalKeyword, staticKeyword, returnType, propertyKeyword, null, name, parameters, body);
+ return new MethodDeclaration(
+ commentAndMetadata.comment,
+ commentAndMetadata.metadata,
+ externalKeyword,
+ staticKeyword,
+ returnType,
+ propertyKeyword,
+ null,
+ name,
+ parameters,
+ body);
}
/**
@@ -6243,14 +7987,16 @@ class Parser {
*/
Expression _parseShiftExpression() {
Expression expression;
- if (_matchesKeyword(Keyword.SUPER) && _currentToken.next.type.isShiftOperator) {
+ if (_matchesKeyword(Keyword.SUPER) &&
+ _currentToken.next.type.isShiftOperator) {
expression = new SuperExpression(andAdvance);
} else {
expression = _parseAdditiveExpression();
}
while (_currentToken.type.isShiftOperator) {
Token operator = andAdvance;
- expression = new BinaryExpression(expression, operator, _parseAdditiveExpression());
+ expression =
+ new BinaryExpression(expression, operator, _parseAdditiveExpression());
}
return expression;
}
@@ -6268,10 +8014,15 @@ class Parser {
List<Statement> _parseStatementList() {
List<Statement> statements = new List<Statement>();
Token statementStart = _currentToken;
- while (!_matches(TokenType.EOF) && !_matches(TokenType.CLOSE_CURLY_BRACKET) && !_isSwitchMember()) {
+ while (!_matches(TokenType.EOF) &&
+ !_matches(TokenType.CLOSE_CURLY_BRACKET) &&
+ !_isSwitchMember()) {
statements.add(parseStatement2());
if (identical(_currentToken, statementStart)) {
- _reportErrorForToken(ParserErrorCode.UNEXPECTED_TOKEN, _currentToken, [_currentToken.lexeme]);
+ _reportErrorForToken(
+ ParserErrorCode.UNEXPECTED_TOKEN,
+ _currentToken,
+ [_currentToken.lexeme]);
_advance();
}
statementStart = _currentToken;
@@ -6286,8 +8037,13 @@ class Parser {
*/
StringInterpolation _parseStringInterpolation(Token string) {
List<InterpolationElement> elements = new List<InterpolationElement>();
- bool hasMore = _matches(TokenType.STRING_INTERPOLATION_EXPRESSION) || _matches(TokenType.STRING_INTERPOLATION_IDENTIFIER);
- elements.add(new InterpolationString(string, _computeStringValue(string.lexeme, true, !hasMore)));
+ bool hasMore =
+ _matches(TokenType.STRING_INTERPOLATION_EXPRESSION) ||
+ _matches(TokenType.STRING_INTERPOLATION_IDENTIFIER);
+ elements.add(
+ new InterpolationString(
+ string,
+ _computeStringValue(string.lexeme, true, !hasMore)));
while (hasMore) {
if (_matches(TokenType.STRING_INTERPOLATION_EXPRESSION)) {
Token openToken = andAdvance;
@@ -6296,7 +8052,8 @@ class Parser {
try {
Expression expression = parseExpression2();
Token rightBracket = _expect(TokenType.CLOSE_CURLY_BRACKET);
- elements.add(new InterpolationExpression(openToken, expression, rightBracket));
+ elements.add(
+ new InterpolationExpression(openToken, expression, rightBracket));
} finally {
_inInitializer = wasInInitializer;
}
@@ -6312,8 +8069,12 @@ class Parser {
}
if (_matches(TokenType.STRING)) {
string = andAdvance;
- hasMore = _matches(TokenType.STRING_INTERPOLATION_EXPRESSION) || _matches(TokenType.STRING_INTERPOLATION_IDENTIFIER);
- elements.add(new InterpolationString(string, _computeStringValue(string.lexeme, false, !hasMore)));
+ hasMore = _matches(TokenType.STRING_INTERPOLATION_EXPRESSION) ||
+ _matches(TokenType.STRING_INTERPOLATION_IDENTIFIER);
+ elements.add(
+ new InterpolationString(
+ string,
+ _computeStringValue(string.lexeme, false, !hasMore)));
} else {
hasMore = false;
}
@@ -6340,7 +8101,11 @@ class Parser {
constructorName = parseSimpleIdentifier();
}
ArgumentList argumentList = parseArgumentList();
- return new SuperConstructorInvocation(keyword, period, constructorName, argumentList);
+ return new SuperConstructorInvocation(
+ keyword,
+ period,
+ constructorName,
+ argumentList);
}
/**
@@ -6371,13 +8136,18 @@ class Parser {
Token leftBracket = _expect(TokenType.OPEN_CURLY_BRACKET);
Token defaultKeyword = null;
List<SwitchMember> members = new List<SwitchMember>();
- while (!_matches(TokenType.EOF) && !_matches(TokenType.CLOSE_CURLY_BRACKET)) {
+ while (!_matches(TokenType.EOF) &&
+ !_matches(TokenType.CLOSE_CURLY_BRACKET)) {
List<Label> labels = new List<Label>();
- while (_matchesIdentifier() && _tokenMatches(_peek(), TokenType.COLON)) {
+ while (_matchesIdentifier() &&
+ _tokenMatches(_peek(), TokenType.COLON)) {
SimpleIdentifier identifier = parseSimpleIdentifier();
String label = identifier.token.lexeme;
if (definedLabels.contains(label)) {
- _reportErrorForToken(ParserErrorCode.DUPLICATE_LABEL_IN_SWITCH_STATEMENT, identifier.token, [label]);
+ _reportErrorForToken(
+ ParserErrorCode.DUPLICATE_LABEL_IN_SWITCH_STATEMENT,
+ identifier.token,
+ [label]);
} else {
definedLabels.add(label);
}
@@ -6388,28 +8158,49 @@ class Parser {
Token caseKeyword = andAdvance;
Expression caseExpression = parseExpression2();
Token colon = _expect(TokenType.COLON);
- members.add(new SwitchCase(labels, caseKeyword, caseExpression, colon, _parseStatementList()));
+ members.add(
+ new SwitchCase(
+ labels,
+ caseKeyword,
+ caseExpression,
+ colon,
+ _parseStatementList()));
if (defaultKeyword != null) {
- _reportErrorForToken(ParserErrorCode.SWITCH_HAS_CASE_AFTER_DEFAULT_CASE, caseKeyword);
+ _reportErrorForToken(
+ ParserErrorCode.SWITCH_HAS_CASE_AFTER_DEFAULT_CASE,
+ caseKeyword);
}
} else if (_matchesKeyword(Keyword.DEFAULT)) {
if (defaultKeyword != null) {
- _reportErrorForToken(ParserErrorCode.SWITCH_HAS_MULTIPLE_DEFAULT_CASES, _peek());
+ _reportErrorForToken(
+ ParserErrorCode.SWITCH_HAS_MULTIPLE_DEFAULT_CASES,
+ _peek());
}
defaultKeyword = andAdvance;
Token colon = _expect(TokenType.COLON);
- members.add(new SwitchDefault(labels, defaultKeyword, colon, _parseStatementList()));
+ members.add(
+ new SwitchDefault(labels, defaultKeyword, colon, _parseStatementList()));
} else {
- // We need to advance, otherwise we could end up in an infinite loop, but this could be a
- // lot smarter about recovering from the error.
+ // We need to advance, otherwise we could end up in an infinite loop,
+ // but this could be a lot smarter about recovering from the error.
_reportErrorForCurrentToken(ParserErrorCode.EXPECTED_CASE_OR_DEFAULT);
- while (!_matches(TokenType.EOF) && !_matches(TokenType.CLOSE_CURLY_BRACKET) && !_matchesKeyword(Keyword.CASE) && !_matchesKeyword(Keyword.DEFAULT)) {
+ while (!_matches(TokenType.EOF) &&
+ !_matches(TokenType.CLOSE_CURLY_BRACKET) &&
+ !_matchesKeyword(Keyword.CASE) &&
+ !_matchesKeyword(Keyword.DEFAULT)) {
_advance();
}
}
}
Token rightBracket = _expect(TokenType.CLOSE_CURLY_BRACKET);
- return new SwitchStatement(keyword, leftParenthesis, expression, rightParenthesis, leftBracket, members, rightBracket);
+ return new SwitchStatement(
+ keyword,
+ leftParenthesis,
+ expression,
+ rightParenthesis,
+ leftBracket,
+ members,
+ rightBracket);
} finally {
_inSwitch = wasInSwitch;
}
@@ -6464,7 +8255,9 @@ class Parser {
Expression _parseThrowExpression() {
Token keyword = _expectKeyword(Keyword.THROW);
if (_matches(TokenType.SEMICOLON) || _matches(TokenType.CLOSE_PAREN)) {
- _reportErrorForToken(ParserErrorCode.MISSING_EXPRESSION_IN_THROW, _currentToken);
+ _reportErrorForToken(
+ ParserErrorCode.MISSING_EXPRESSION_IN_THROW,
+ _currentToken);
return new ThrowExpression(keyword, _createSyntheticIdentifier());
}
Expression expression = parseExpression2();
@@ -6484,7 +8277,9 @@ class Parser {
Expression _parseThrowExpressionWithoutCascade() {
Token keyword = _expectKeyword(Keyword.THROW);
if (_matches(TokenType.SEMICOLON) || _matches(TokenType.CLOSE_PAREN)) {
- _reportErrorForToken(ParserErrorCode.MISSING_EXPRESSION_IN_THROW, _currentToken);
+ _reportErrorForToken(
+ ParserErrorCode.MISSING_EXPRESSION_IN_THROW,
+ _currentToken);
return new ThrowExpression(keyword, _createSyntheticIdentifier());
}
Expression expression = parseExpressionWithoutCascade();
@@ -6540,7 +8335,17 @@ class Parser {
rightParenthesis = _expect(TokenType.CLOSE_PAREN);
}
Block catchBody = parseBlock();
- catchClauses.add(new CatchClause(onKeyword, exceptionType, catchKeyword, leftParenthesis, exceptionParameter, comma, stackTraceParameter, rightParenthesis, catchBody));
+ catchClauses.add(
+ new CatchClause(
+ onKeyword,
+ exceptionType,
+ catchKeyword,
+ leftParenthesis,
+ exceptionParameter,
+ comma,
+ stackTraceParameter,
+ rightParenthesis,
+ catchBody));
}
Token finallyKeyword = null;
if (_matchesKeyword(Keyword.FINALLY)) {
@@ -6551,7 +8356,12 @@ class Parser {
_reportErrorForCurrentToken(ParserErrorCode.MISSING_CATCH_OR_FINALLY);
}
}
- return new TryStatement(tryKeyword, body, catchClauses, finallyKeyword, finallyClause);
+ return new TryStatement(
+ tryKeyword,
+ body,
+ catchClauses,
+ finallyKeyword,
+ finallyClause);
}
/**
@@ -6588,13 +8398,19 @@ class Parser {
if (_tokenMatches(next, TokenType.LT)) {
next = _skipTypeParameterList(next);
if (next != null && _tokenMatches(next, TokenType.EQ)) {
- TypeAlias typeAlias = _parseClassTypeAlias(commentAndMetadata, null, keyword);
- _reportErrorForToken(ParserErrorCode.DEPRECATED_CLASS_TYPE_ALIAS, keyword);
+ TypeAlias typeAlias =
+ _parseClassTypeAlias(commentAndMetadata, null, keyword);
+ _reportErrorForToken(
+ ParserErrorCode.DEPRECATED_CLASS_TYPE_ALIAS,
+ keyword);
return typeAlias;
}
} else if (_tokenMatches(next, TokenType.EQ)) {
- TypeAlias typeAlias = _parseClassTypeAlias(commentAndMetadata, null, keyword);
- _reportErrorForToken(ParserErrorCode.DEPRECATED_CLASS_TYPE_ALIAS, keyword);
+ TypeAlias typeAlias =
+ _parseClassTypeAlias(commentAndMetadata, null, keyword);
+ _reportErrorForToken(
+ ParserErrorCode.DEPRECATED_CLASS_TYPE_ALIAS,
+ keyword);
return typeAlias;
}
}
@@ -6617,10 +8433,13 @@ class Parser {
* @return the unary expression that was parsed
*/
Expression _parseUnaryExpression() {
- if (_matches(TokenType.MINUS) || _matches(TokenType.BANG) || _matches(TokenType.TILDE)) {
+ if (_matches(TokenType.MINUS) ||
+ _matches(TokenType.BANG) ||
+ _matches(TokenType.TILDE)) {
Token operator = andAdvance;
if (_matchesKeyword(Keyword.SUPER)) {
- if (_tokenMatches(_peek(), TokenType.OPEN_SQUARE_BRACKET) || _tokenMatches(_peek(), TokenType.PERIOD)) {
+ if (_tokenMatches(_peek(), TokenType.OPEN_SQUARE_BRACKET) ||
+ _tokenMatches(_peek(), TokenType.PERIOD)) {
// "prefixOperator unaryExpression"
// --> "prefixOperator postfixExpression"
// --> "prefixOperator primary selector*"
@@ -6633,14 +8452,17 @@ class Parser {
} else if (_currentToken.type.isIncrementOperator) {
Token operator = andAdvance;
if (_matchesKeyword(Keyword.SUPER)) {
- if (_tokenMatches(_peek(), TokenType.OPEN_SQUARE_BRACKET) || _tokenMatches(_peek(), TokenType.PERIOD)) {
+ if (_tokenMatches(_peek(), TokenType.OPEN_SQUARE_BRACKET) ||
+ _tokenMatches(_peek(), TokenType.PERIOD)) {
// --> "prefixOperator 'super' assignableSelector selector*"
return new PrefixExpression(operator, _parseUnaryExpression());
}
//
- // Even though it is not valid to use an incrementing operator ('++' or '--') before 'super',
- // we can (and therefore must) interpret "--super" as semantically equivalent to "-(-super)".
- // Unfortunately, we cannot do the same for "++super" because "+super" is also not valid.
+ // Even though it is not valid to use an incrementing operator
+ // ('++' or '--') before 'super', we can (and therefore must) interpret
+ // "--super" as semantically equivalent to "-(-super)". Unfortunately,
+ // we cannot do the same for "++super" because "+super" is also not
+ // valid.
//
if (operator.type == TokenType.MINUS_MINUS) {
int offset = operator.offset;
@@ -6649,11 +8471,17 @@ class Parser {
secondOperator.setNext(_currentToken);
firstOperator.setNext(secondOperator);
operator.previous.setNext(firstOperator);
- return new PrefixExpression(firstOperator, new PrefixExpression(secondOperator, new SuperExpression(andAdvance)));
+ return new PrefixExpression(
+ firstOperator,
+ new PrefixExpression(secondOperator, new SuperExpression(andAdvance)));
} else {
// Invalid operator before 'super'
- _reportErrorForCurrentToken(ParserErrorCode.INVALID_OPERATOR_FOR_SUPER, [operator.lexeme]);
- return new PrefixExpression(operator, new SuperExpression(andAdvance));
+ _reportErrorForCurrentToken(
+ ParserErrorCode.INVALID_OPERATOR_FOR_SUPER,
+ [operator.lexeme]);
+ return new PrefixExpression(
+ operator,
+ new SuperExpression(andAdvance));
}
}
return new PrefixExpression(operator, _parseAssignableExpression(false));
@@ -6685,7 +8513,12 @@ class Parser {
equals = andAdvance;
initializer = parseExpression2();
}
- return new VariableDeclaration(commentAndMetadata.comment, commentAndMetadata.metadata, name, equals, initializer);
+ return new VariableDeclaration(
+ commentAndMetadata.comment,
+ commentAndMetadata.metadata,
+ name,
+ equals,
+ initializer);
}
/**
@@ -6699,9 +8532,13 @@ class Parser {
* @param commentAndMetadata the metadata to be associated with the variable declaration list
* @return the variable declaration list that was parsed
*/
- VariableDeclarationList _parseVariableDeclarationListAfterMetadata(CommentAndMetadata commentAndMetadata) {
+ VariableDeclarationList
+ _parseVariableDeclarationListAfterMetadata(CommentAndMetadata commentAndMetadata) {
FinalConstVarOrType holder = _parseFinalConstVarOrType(false);
- return _parseVariableDeclarationListAfterType(commentAndMetadata, holder.keyword, holder.type);
+ return _parseVariableDeclarationListAfterType(
+ commentAndMetadata,
+ holder.keyword,
+ holder.type);
}
/**
@@ -6719,8 +8556,12 @@ class Parser {
* @param type the type of the variables in the list
* @return the variable declaration list that was parsed
*/
- VariableDeclarationList _parseVariableDeclarationListAfterType(CommentAndMetadata commentAndMetadata, Token keyword, TypeName type) {
- if (type != null && keyword != null && _tokenMatchesKeyword(keyword, Keyword.VAR)) {
+ VariableDeclarationList
+ _parseVariableDeclarationListAfterType(CommentAndMetadata commentAndMetadata,
+ Token keyword, TypeName type) {
+ if (type != null &&
+ keyword != null &&
+ _tokenMatchesKeyword(keyword, Keyword.VAR)) {
_reportErrorForToken(ParserErrorCode.VAR_AND_TYPE, keyword);
}
List<VariableDeclaration> variables = new List<VariableDeclaration>();
@@ -6729,7 +8570,12 @@ class Parser {
_advance();
variables.add(_parseVariableDeclaration());
}
- return new VariableDeclarationList(commentAndMetadata != null ? commentAndMetadata.comment : null, commentAndMetadata != null ? commentAndMetadata.metadata : null, keyword, type, variables);
+ return new VariableDeclarationList(
+ commentAndMetadata != null ? commentAndMetadata.comment : null,
+ commentAndMetadata != null ? commentAndMetadata.metadata : null,
+ keyword,
+ type,
+ variables);
}
/**
@@ -6744,15 +8590,17 @@ class Parser {
* statement, or `null` if there is no attempt at parsing the comment and metadata
* @return the variable declaration statement that was parsed
*/
- VariableDeclarationStatement _parseVariableDeclarationStatementAfterMetadata(CommentAndMetadata commentAndMetadata) {
+ VariableDeclarationStatement
+ _parseVariableDeclarationStatementAfterMetadata(CommentAndMetadata commentAndMetadata) {
// Token startToken = currentToken;
- VariableDeclarationList variableList = _parseVariableDeclarationListAfterMetadata(commentAndMetadata);
- // if (!matches(TokenType.SEMICOLON)) {
- // if (matches(startToken, Keyword.VAR) && isTypedIdentifier(startToken.getNext())) {
- // // TODO(brianwilkerson) This appears to be of the form "var type variable". We should do
- // // a better job of recovering in this case.
- // }
- // }
+ VariableDeclarationList variableList =
+ _parseVariableDeclarationListAfterMetadata(commentAndMetadata);
+// if (!matches(TokenType.SEMICOLON)) {
+// if (matches(startToken, Keyword.VAR) && isTypedIdentifier(startToken.getNext())) {
+// // TODO(brianwilkerson) This appears to be of the form "var type variable". We should do
+// // a better job of recovering in this case.
+// }
+// }
Token semicolon = _expect(TokenType.SEMICOLON);
return new VariableDeclarationStatement(variableList, semicolon);
}
@@ -6772,8 +8620,11 @@ class Parser {
* @param type the type of the variables in the list
* @return the variable declaration statement that was parsed
*/
- VariableDeclarationStatement _parseVariableDeclarationStatementAfterType(CommentAndMetadata commentAndMetadata, Token keyword, TypeName type) {
- VariableDeclarationList variableList = _parseVariableDeclarationListAfterType(commentAndMetadata, keyword, type);
+ VariableDeclarationStatement
+ _parseVariableDeclarationStatementAfterType(CommentAndMetadata commentAndMetadata,
+ Token keyword, TypeName type) {
+ VariableDeclarationList variableList =
+ _parseVariableDeclarationListAfterType(commentAndMetadata, keyword, type);
Token semicolon = _expect(TokenType.SEMICOLON);
return new VariableDeclarationStatement(variableList, semicolon);
}
@@ -6797,7 +8648,12 @@ class Parser {
Expression condition = parseExpression2();
Token rightParenthesis = _expect(TokenType.CLOSE_PAREN);
Statement body = parseStatement2();
- return new WhileStatement(keyword, leftParenthesis, condition, rightParenthesis, body);
+ return new WhileStatement(
+ keyword,
+ leftParenthesis,
+ condition,
+ rightParenthesis,
+ body);
} finally {
_inLoop = wasInLoop;
}
@@ -6865,7 +8721,8 @@ class Parser {
* @param errorCode the error code of the error to be reported
* @param arguments the arguments to the error, used to compose the error message
*/
- void _reportErrorForCurrentToken(ParserErrorCode errorCode, [List<Object> arguments]) {
+ void _reportErrorForCurrentToken(ParserErrorCode errorCode,
+ [List<Object> arguments]) {
_reportErrorForToken(errorCode, _currentToken, arguments);
}
@@ -6876,8 +8733,15 @@ class Parser {
* @param node the node specifying the location of the error
* @param arguments the arguments to the error, used to compose the error message
*/
- void _reportErrorForNode(ParserErrorCode errorCode, AstNode node, [List<Object> arguments]) {
- _reportError(new AnalysisError.con2(_source, node.offset, node.length, errorCode, arguments));
+ void _reportErrorForNode(ParserErrorCode errorCode, AstNode node,
+ [List<Object> arguments]) {
+ _reportError(
+ new AnalysisError.con2(
+ _source,
+ node.offset,
+ node.length,
+ errorCode,
+ arguments));
}
/**
@@ -6887,11 +8751,18 @@ class Parser {
* @param token the token specifying the location of the error
* @param arguments the arguments to the error, used to compose the error message
*/
- void _reportErrorForToken(ErrorCode errorCode, Token token, [List<Object> arguments]) {
+ void _reportErrorForToken(ErrorCode errorCode, Token token,
+ [List<Object> arguments]) {
if (token.type == TokenType.EOF) {
token = token.previous;
}
- _reportError(new AnalysisError.con2(_source, token.offset, math.max(token.length, 1), errorCode, arguments));
+ _reportError(
+ new AnalysisError.con2(
+ _source,
+ token.offset,
+ math.max(token.length, 1),
+ errorCode,
+ arguments));
}
/**
@@ -6905,7 +8776,10 @@ class Parser {
_currentToken = endToken;
endToken = _currentToken.next;
}
- _reportErrorForToken(ParserErrorCode.EXPECTED_TOKEN, _currentToken.previous, ["}"]);
+ _reportErrorForToken(
+ ParserErrorCode.EXPECTED_TOKEN,
+ _currentToken.previous,
+ ["}"]);
} else {
_currentToken = endToken.next;
}
@@ -6929,12 +8803,15 @@ class Parser {
* @return the token following the type that was parsed
*/
Token _skipFinalConstVarOrType(Token startToken) {
- if (_tokenMatchesKeyword(startToken, Keyword.FINAL) || _tokenMatchesKeyword(startToken, Keyword.CONST)) {
+ if (_tokenMatchesKeyword(startToken, Keyword.FINAL) ||
+ _tokenMatchesKeyword(startToken, Keyword.CONST)) {
Token next = startToken.next;
if (_tokenMatchesIdentifier(next)) {
Token next2 = next.next;
// "Type parameter" or "Type<" or "prefix.Type"
- if (_tokenMatchesIdentifier(next2) || _tokenMatches(next2, TokenType.LT) || _tokenMatches(next2, TokenType.PERIOD)) {
+ if (_tokenMatchesIdentifier(next2) ||
+ _tokenMatches(next2, TokenType.LT) ||
+ _tokenMatches(next2, TokenType.PERIOD)) {
return _skipTypeName(next);
}
// "parameter"
@@ -6944,7 +8821,14 @@ class Parser {
return startToken.next;
} else if (_tokenMatchesIdentifier(startToken)) {
Token next = startToken.next;
- if (_tokenMatchesIdentifier(next) || _tokenMatches(next, TokenType.LT) || _tokenMatchesKeyword(next, Keyword.THIS) || (_tokenMatches(next, TokenType.PERIOD) && _tokenMatchesIdentifier(next.next) && (_tokenMatchesIdentifier(next.next.next) || _tokenMatches(next.next.next, TokenType.LT) || _tokenMatchesKeyword(next.next.next, Keyword.THIS)))) {
+ if (_tokenMatchesIdentifier(next) ||
+ _tokenMatches(next, TokenType.LT) ||
+ _tokenMatchesKeyword(next, Keyword.THIS) ||
+ (_tokenMatches(next, TokenType.PERIOD) &&
+ _tokenMatchesIdentifier(next.next) &&
+ (_tokenMatchesIdentifier(next.next.next) ||
+ _tokenMatches(next.next.next, TokenType.LT) ||
+ _tokenMatchesKeyword(next.next.next, Keyword.THIS)))) {
return _skipReturnType(startToken);
}
}
@@ -6997,27 +8881,31 @@ class Parser {
return next.next;
}
//
- // Look to see whether the token after the open parenthesis is something that should only occur
- // at the beginning of a parameter list.
+ // Look to see whether the token after the open parenthesis is something
+ // that should only occur at the beginning of a parameter list.
//
- if (next.matchesAny([
- TokenType.AT,
- TokenType.OPEN_SQUARE_BRACKET,
- TokenType.OPEN_CURLY_BRACKET]) || _tokenMatchesKeyword(next, Keyword.VOID) || (_tokenMatchesIdentifier(next) && (next.next.matchesAny([TokenType.COMMA, TokenType.CLOSE_PAREN])))) {
+ if (next.matchesAny(
+ [TokenType.AT, TokenType.OPEN_SQUARE_BRACKET, TokenType.OPEN_CURLY_BRACKET]) ||
+ _tokenMatchesKeyword(next, Keyword.VOID) ||
+ (_tokenMatchesIdentifier(next) &&
+ (next.next.matchesAny([TokenType.COMMA, TokenType.CLOSE_PAREN])))) {
return _skipPastMatchingToken(startToken);
}
//
- // Look to see whether the first parameter is a function typed parameter without a return type.
+ // Look to see whether the first parameter is a function typed parameter
+ // without a return type.
//
- if (_tokenMatchesIdentifier(next) && _tokenMatches(next.next, TokenType.OPEN_PAREN)) {
+ if (_tokenMatchesIdentifier(next) &&
+ _tokenMatches(next.next, TokenType.OPEN_PAREN)) {
Token afterParameters = _skipFormalParameterList(next.next);
- if (afterParameters != null && (afterParameters.matchesAny([TokenType.COMMA, TokenType.CLOSE_PAREN]))) {
+ if (afterParameters != null &&
+ (afterParameters.matchesAny([TokenType.COMMA, TokenType.CLOSE_PAREN]))) {
return _skipPastMatchingToken(startToken);
}
}
//
- // Look to see whether the first parameter has a type or is a function typed parameter with a
- // return type.
+ // Look to see whether the first parameter has a type or is a function typed
+ // parameter with a return type.
//
Token afterType = _skipFinalConstVarOrType(next);
if (afterType == null) {
@@ -7114,7 +9002,9 @@ class Parser {
* @return the token following the simple identifier that was parsed
*/
Token _skipSimpleIdentifier(Token startToken) {
- if (_tokenMatches(startToken, TokenType.IDENTIFIER) || (_tokenMatches(startToken, TokenType.KEYWORD) && (startToken as KeywordToken).keyword.isPseudoKeyword)) {
+ if (_tokenMatches(startToken, TokenType.IDENTIFIER) ||
+ (_tokenMatches(startToken, TokenType.KEYWORD) &&
+ (startToken as KeywordToken).keyword.isPseudoKeyword)) {
return startToken.next;
}
return null;
@@ -7134,14 +9024,15 @@ class Parser {
Token _skipStringInterpolation(Token startToken) {
Token token = startToken;
TokenType type = token.type;
- while (type == TokenType.STRING_INTERPOLATION_EXPRESSION || type == TokenType.STRING_INTERPOLATION_IDENTIFIER) {
+ while (type == TokenType.STRING_INTERPOLATION_EXPRESSION ||
+ type == TokenType.STRING_INTERPOLATION_IDENTIFIER) {
if (type == TokenType.STRING_INTERPOLATION_EXPRESSION) {
token = token.next;
type = token.type;
//
- // Rather than verify that the following tokens represent a valid expression, we simply skip
- // tokens until we reach the end of the interpolation, being careful to handle nested string
- // literals.
+ // Rather than verify that the following tokens represent a valid
+ // expression, we simply skip tokens until we reach the end of the
+ // interpolation, being careful to handle nested string literals.
//
int bracketNestingLevel = 1;
while (bracketNestingLevel > 0) {
@@ -7200,7 +9091,8 @@ class Parser {
while (token != null && _tokenMatches(token, TokenType.STRING)) {
token = token.next;
TokenType type = token.type;
- if (type == TokenType.STRING_INTERPOLATION_EXPRESSION || type == TokenType.STRING_INTERPOLATION_IDENTIFIER) {
+ if (type == TokenType.STRING_INTERPOLATION_EXPRESSION ||
+ type == TokenType.STRING_INTERPOLATION_IDENTIFIER) {
token = _skipStringInterpolation(token);
}
}
@@ -7300,8 +9192,8 @@ class Parser {
return null;
}
//
- // We can't skip a type parameter because it can be preceeded by metadata, so we just assume
- // that everything before the matching end token is valid.
+ // We can't skip a type parameter because it can be preceeded by metadata,
+ // so we just assume that everything before the matching end token is valid.
//
int depth = 1;
Token next = startToken.next;
@@ -7351,7 +9243,10 @@ class Parser {
*
* @return `true` if the given token is a valid identifier
*/
- bool _tokenMatchesIdentifier(Token token) => _tokenMatches(token, TokenType.IDENTIFIER) || (_tokenMatches(token, TokenType.KEYWORD) && (token as KeywordToken).keyword.isPseudoKeyword);
+ bool _tokenMatchesIdentifier(Token token) =>
+ _tokenMatches(token, TokenType.IDENTIFIER) ||
+ (_tokenMatches(token, TokenType.KEYWORD) &&
+ (token as KeywordToken).keyword.isPseudoKeyword);
/**
* Return `true` if the given token matches the given keyword.
@@ -7360,7 +9255,8 @@ class Parser {
* @param keyword the keyword that is being tested for
* @return `true` if the given token matches the given keyword
*/
- bool _tokenMatchesKeyword(Token token, Keyword keyword) => token.type == TokenType.KEYWORD && (token as KeywordToken).keyword == keyword;
+ bool _tokenMatchesKeyword(Token token, Keyword keyword) =>
+ token.type == TokenType.KEYWORD && (token as KeywordToken).keyword == keyword;
/**
* Return `true` if the given token matches the given identifier.
@@ -7369,7 +9265,8 @@ class Parser {
* @param identifier the identifier that can optionally appear in the current location
* @return `true` if the current token matches the given identifier
*/
- bool _tokenMatchesString(Token token, String identifier) => token.type == TokenType.IDENTIFIER && token.lexeme == identifier;
+ bool _tokenMatchesString(Token token, String identifier) =>
+ token.type == TokenType.IDENTIFIER && token.lexeme == identifier;
/**
* Translate the characters at the given [index] in the given [lexeme],
@@ -7427,8 +9324,9 @@ class Parser {
// Illegal escape sequence: invalid hex digit
_reportErrorForCurrentToken(ParserErrorCode.INVALID_HEX_ESCAPE);
} else {
- int charCode = (Character.digit(firstDigit, 16) << 4)
- + Character.digit(secondDigit, 16);
+ int charCode =
+ (Character.digit(firstDigit, 16) << 4) +
+ Character.digit(secondDigit, 16);
buffer.writeCharCode(charCode);
}
return currentIndex + 3;
@@ -7455,8 +9353,8 @@ class Parser {
// Illegal escape sequence: invalid hex digit
_reportErrorForCurrentToken(ParserErrorCode.INVALID_UNICODE_ESCAPE);
currentIndex++;
- while (currentIndex < length
- && lexeme.codeUnitAt(currentIndex) != 0x7D) {
+ while (currentIndex < length &&
+ lexeme.codeUnitAt(currentIndex) != 0x7D) {
currentIndex++;
}
return currentIndex + 1;
@@ -7492,20 +9390,22 @@ class Parser {
int secondDigit = lexeme.codeUnitAt(currentIndex + 1);
int thirdDigit = lexeme.codeUnitAt(currentIndex + 2);
int fourthDigit = lexeme.codeUnitAt(currentIndex + 3);
- if (!_isHexDigit(firstDigit)
- || !_isHexDigit(secondDigit)
- || !_isHexDigit(thirdDigit)
- || !_isHexDigit(fourthDigit)) {
+ if (!_isHexDigit(firstDigit) ||
+ !_isHexDigit(secondDigit) ||
+ !_isHexDigit(thirdDigit) ||
+ !_isHexDigit(fourthDigit)) {
// Illegal escape sequence: invalid hex digits
_reportErrorForCurrentToken(ParserErrorCode.INVALID_UNICODE_ESCAPE);
} else {
_appendScalarValue(
buffer,
lexeme.substring(index, currentIndex + 1),
- (((((Character.digit(firstDigit, 16) << 4)
- + Character.digit(secondDigit, 16)) << 4)
- + Character.digit(thirdDigit, 16)) << 4)
- + Character.digit(fourthDigit, 16),
+ (((((Character.digit(firstDigit, 16) << 4) +
+ Character.digit(secondDigit, 16)) <<
+ 4) +
+ Character.digit(thirdDigit, 16)) <<
+ 4) +
+ Character.digit(fourthDigit, 16),
index,
currentIndex + 3);
}
@@ -7523,7 +9423,8 @@ class Parser {
*/
void _unlockErrorListener() {
if (_errorListenerLock == 0) {
- throw new IllegalStateException("Attempt to unlock not locked error listener.");
+ throw new IllegalStateException(
+ "Attempt to unlock not locked error listener.");
}
_errorListenerLock--;
}
@@ -7536,7 +9437,9 @@ class Parser {
void _validateFormalParameterList(FormalParameterList parameterList) {
for (FormalParameter parameter in parameterList.parameters) {
if (parameter is FieldFormalParameter) {
- _reportErrorForNode(ParserErrorCode.FIELD_INITIALIZER_OUTSIDE_CONSTRUCTOR, parameter.identifier);
+ _reportErrorForNode(
+ ParserErrorCode.FIELD_INITIALIZER_OUTSIDE_CONSTRUCTOR,
+ parameter.identifier);
}
}
}
@@ -7553,7 +9456,9 @@ class Parser {
_reportErrorForToken(ParserErrorCode.CONST_CLASS, modifiers.constKeyword);
}
if (modifiers.externalKeyword != null) {
- _reportErrorForToken(ParserErrorCode.EXTERNAL_CLASS, modifiers.externalKeyword);
+ _reportErrorForToken(
+ ParserErrorCode.EXTERNAL_CLASS,
+ modifiers.externalKeyword);
}
if (modifiers.finalKeyword != null) {
_reportErrorForToken(ParserErrorCode.FINAL_CLASS, modifiers.finalKeyword);
@@ -7573,25 +9478,41 @@ class Parser {
*/
Token _validateModifiersForConstructor(Modifiers modifiers) {
if (modifiers.abstractKeyword != null) {
- _reportErrorForToken(ParserErrorCode.ABSTRACT_CLASS_MEMBER, modifiers.abstractKeyword);
+ _reportErrorForToken(
+ ParserErrorCode.ABSTRACT_CLASS_MEMBER,
+ modifiers.abstractKeyword);
}
if (modifiers.finalKeyword != null) {
- _reportErrorForToken(ParserErrorCode.FINAL_CONSTRUCTOR, modifiers.finalKeyword);
+ _reportErrorForToken(
+ ParserErrorCode.FINAL_CONSTRUCTOR,
+ modifiers.finalKeyword);
}
if (modifiers.staticKeyword != null) {
- _reportErrorForToken(ParserErrorCode.STATIC_CONSTRUCTOR, modifiers.staticKeyword);
+ _reportErrorForToken(
+ ParserErrorCode.STATIC_CONSTRUCTOR,
+ modifiers.staticKeyword);
}
if (modifiers.varKeyword != null) {
- _reportErrorForToken(ParserErrorCode.CONSTRUCTOR_WITH_RETURN_TYPE, modifiers.varKeyword);
+ _reportErrorForToken(
+ ParserErrorCode.CONSTRUCTOR_WITH_RETURN_TYPE,
+ modifiers.varKeyword);
}
Token externalKeyword = modifiers.externalKeyword;
Token constKeyword = modifiers.constKeyword;
Token factoryKeyword = modifiers.factoryKeyword;
- if (externalKeyword != null && constKeyword != null && constKeyword.offset < externalKeyword.offset) {
- _reportErrorForToken(ParserErrorCode.EXTERNAL_AFTER_CONST, externalKeyword);
- }
- if (externalKeyword != null && factoryKeyword != null && factoryKeyword.offset < externalKeyword.offset) {
- _reportErrorForToken(ParserErrorCode.EXTERNAL_AFTER_FACTORY, externalKeyword);
+ if (externalKeyword != null &&
+ constKeyword != null &&
+ constKeyword.offset < externalKeyword.offset) {
+ _reportErrorForToken(
+ ParserErrorCode.EXTERNAL_AFTER_CONST,
+ externalKeyword);
+ }
+ if (externalKeyword != null &&
+ factoryKeyword != null &&
+ factoryKeyword.offset < externalKeyword.offset) {
+ _reportErrorForToken(
+ ParserErrorCode.EXTERNAL_AFTER_FACTORY,
+ externalKeyword);
}
return constKeyword;
}
@@ -7605,13 +9526,17 @@ class Parser {
void _validateModifiersForEnum(Modifiers modifiers) {
_validateModifiersForTopLevelDeclaration(modifiers);
if (modifiers.abstractKeyword != null) {
- _reportErrorForToken(ParserErrorCode.ABSTRACT_ENUM, modifiers.abstractKeyword);
+ _reportErrorForToken(
+ ParserErrorCode.ABSTRACT_ENUM,
+ modifiers.abstractKeyword);
}
if (modifiers.constKeyword != null) {
_reportErrorForToken(ParserErrorCode.CONST_ENUM, modifiers.constKeyword);
}
if (modifiers.externalKeyword != null) {
- _reportErrorForToken(ParserErrorCode.EXTERNAL_ENUM, modifiers.externalKeyword);
+ _reportErrorForToken(
+ ParserErrorCode.EXTERNAL_ENUM,
+ modifiers.externalKeyword);
}
if (modifiers.finalKeyword != null) {
_reportErrorForToken(ParserErrorCode.FINAL_ENUM, modifiers.finalKeyword);
@@ -7633,10 +9558,14 @@ class Parser {
_reportErrorForCurrentToken(ParserErrorCode.ABSTRACT_CLASS_MEMBER);
}
if (modifiers.externalKeyword != null) {
- _reportErrorForToken(ParserErrorCode.EXTERNAL_FIELD, modifiers.externalKeyword);
+ _reportErrorForToken(
+ ParserErrorCode.EXTERNAL_FIELD,
+ modifiers.externalKeyword);
}
if (modifiers.factoryKeyword != null) {
- _reportErrorForToken(ParserErrorCode.NON_CONSTRUCTOR_FACTORY, modifiers.factoryKeyword);
+ _reportErrorForToken(
+ ParserErrorCode.NON_CONSTRUCTOR_FACTORY,
+ modifiers.factoryKeyword);
}
Token staticKeyword = modifiers.staticKeyword;
Token constKeyword = modifiers.constKeyword;
@@ -7659,7 +9588,9 @@ class Parser {
if (staticKeyword != null && finalKeyword.offset < staticKeyword.offset) {
_reportErrorForToken(ParserErrorCode.STATIC_AFTER_FINAL, staticKeyword);
}
- } else if (varKeyword != null && staticKeyword != null && varKeyword.offset < staticKeyword.offset) {
+ } else if (varKeyword != null &&
+ staticKeyword != null &&
+ varKeyword.offset < staticKeyword.offset) {
_reportErrorForToken(ParserErrorCode.STATIC_AFTER_VAR, staticKeyword);
}
return Token.lexicallyFirst([constKeyword, finalKeyword, varKeyword]);
@@ -7671,8 +9602,15 @@ class Parser {
* @param modifiers the modifiers being validated
*/
void _validateModifiersForFunctionDeclarationStatement(Modifiers modifiers) {
- if (modifiers.abstractKeyword != null || modifiers.constKeyword != null || modifiers.externalKeyword != null || modifiers.factoryKeyword != null || modifiers.finalKeyword != null || modifiers.staticKeyword != null || modifiers.varKeyword != null) {
- _reportErrorForCurrentToken(ParserErrorCode.LOCAL_FUNCTION_DECLARATION_MODIFIER);
+ if (modifiers.abstractKeyword != null ||
+ modifiers.constKeyword != null ||
+ modifiers.externalKeyword != null ||
+ modifiers.factoryKeyword != null ||
+ modifiers.finalKeyword != null ||
+ modifiers.staticKeyword != null ||
+ modifiers.varKeyword != null) {
+ _reportErrorForCurrentToken(
+ ParserErrorCode.LOCAL_FUNCTION_DECLARATION_MODIFIER);
}
}
@@ -7686,21 +9624,33 @@ class Parser {
_reportErrorForCurrentToken(ParserErrorCode.ABSTRACT_CLASS_MEMBER);
}
if (modifiers.constKeyword != null) {
- _reportErrorForToken(ParserErrorCode.CONST_METHOD, modifiers.constKeyword);
+ _reportErrorForToken(
+ ParserErrorCode.CONST_METHOD,
+ modifiers.constKeyword);
}
if (modifiers.factoryKeyword != null) {
- _reportErrorForToken(ParserErrorCode.NON_CONSTRUCTOR_FACTORY, modifiers.factoryKeyword);
+ _reportErrorForToken(
+ ParserErrorCode.NON_CONSTRUCTOR_FACTORY,
+ modifiers.factoryKeyword);
}
if (modifiers.finalKeyword != null) {
- _reportErrorForToken(ParserErrorCode.FINAL_METHOD, modifiers.finalKeyword);
+ _reportErrorForToken(
+ ParserErrorCode.FINAL_METHOD,
+ modifiers.finalKeyword);
}
if (modifiers.varKeyword != null) {
- _reportErrorForToken(ParserErrorCode.VAR_RETURN_TYPE, modifiers.varKeyword);
+ _reportErrorForToken(
+ ParserErrorCode.VAR_RETURN_TYPE,
+ modifiers.varKeyword);
}
Token externalKeyword = modifiers.externalKeyword;
Token staticKeyword = modifiers.staticKeyword;
- if (externalKeyword != null && staticKeyword != null && staticKeyword.offset < externalKeyword.offset) {
- _reportErrorForToken(ParserErrorCode.EXTERNAL_AFTER_STATIC, externalKeyword);
+ if (externalKeyword != null &&
+ staticKeyword != null &&
+ staticKeyword.offset < externalKeyword.offset) {
+ _reportErrorForToken(
+ ParserErrorCode.EXTERNAL_AFTER_STATIC,
+ externalKeyword);
}
}
@@ -7714,19 +9664,29 @@ class Parser {
_reportErrorForCurrentToken(ParserErrorCode.ABSTRACT_CLASS_MEMBER);
}
if (modifiers.constKeyword != null) {
- _reportErrorForToken(ParserErrorCode.CONST_METHOD, modifiers.constKeyword);
+ _reportErrorForToken(
+ ParserErrorCode.CONST_METHOD,
+ modifiers.constKeyword);
}
if (modifiers.factoryKeyword != null) {
- _reportErrorForToken(ParserErrorCode.NON_CONSTRUCTOR_FACTORY, modifiers.factoryKeyword);
+ _reportErrorForToken(
+ ParserErrorCode.NON_CONSTRUCTOR_FACTORY,
+ modifiers.factoryKeyword);
}
if (modifiers.finalKeyword != null) {
- _reportErrorForToken(ParserErrorCode.FINAL_METHOD, modifiers.finalKeyword);
+ _reportErrorForToken(
+ ParserErrorCode.FINAL_METHOD,
+ modifiers.finalKeyword);
}
if (modifiers.staticKeyword != null) {
- _reportErrorForToken(ParserErrorCode.STATIC_OPERATOR, modifiers.staticKeyword);
+ _reportErrorForToken(
+ ParserErrorCode.STATIC_OPERATOR,
+ modifiers.staticKeyword);
}
if (modifiers.varKeyword != null) {
- _reportErrorForToken(ParserErrorCode.VAR_RETURN_TYPE, modifiers.varKeyword);
+ _reportErrorForToken(
+ ParserErrorCode.VAR_RETURN_TYPE,
+ modifiers.varKeyword);
}
}
@@ -7737,10 +9697,14 @@ class Parser {
*/
void _validateModifiersForTopLevelDeclaration(Modifiers modifiers) {
if (modifiers.factoryKeyword != null) {
- _reportErrorForToken(ParserErrorCode.FACTORY_TOP_LEVEL_DECLARATION, modifiers.factoryKeyword);
+ _reportErrorForToken(
+ ParserErrorCode.FACTORY_TOP_LEVEL_DECLARATION,
+ modifiers.factoryKeyword);
}
if (modifiers.staticKeyword != null) {
- _reportErrorForToken(ParserErrorCode.STATIC_TOP_LEVEL_DECLARATION, modifiers.staticKeyword);
+ _reportErrorForToken(
+ ParserErrorCode.STATIC_TOP_LEVEL_DECLARATION,
+ modifiers.staticKeyword);
}
}
@@ -7761,7 +9725,9 @@ class Parser {
_reportErrorForToken(ParserErrorCode.FINAL_CLASS, modifiers.finalKeyword);
}
if (modifiers.varKeyword != null) {
- _reportErrorForToken(ParserErrorCode.VAR_RETURN_TYPE, modifiers.varKeyword);
+ _reportErrorForToken(
+ ParserErrorCode.VAR_RETURN_TYPE,
+ modifiers.varKeyword);
}
}
@@ -7778,7 +9744,9 @@ class Parser {
_reportErrorForCurrentToken(ParserErrorCode.ABSTRACT_TOP_LEVEL_VARIABLE);
}
if (modifiers.externalKeyword != null) {
- _reportErrorForToken(ParserErrorCode.EXTERNAL_FIELD, modifiers.externalKeyword);
+ _reportErrorForToken(
+ ParserErrorCode.EXTERNAL_FIELD,
+ modifiers.externalKeyword);
}
Token constKeyword = modifiers.constKeyword;
Token finalKeyword = modifiers.finalKeyword;
@@ -7807,22 +9775,50 @@ class Parser {
void _validateModifiersForTypedef(Modifiers modifiers) {
_validateModifiersForTopLevelDeclaration(modifiers);
if (modifiers.abstractKeyword != null) {
- _reportErrorForToken(ParserErrorCode.ABSTRACT_TYPEDEF, modifiers.abstractKeyword);
+ _reportErrorForToken(
+ ParserErrorCode.ABSTRACT_TYPEDEF,
+ modifiers.abstractKeyword);
}
if (modifiers.constKeyword != null) {
- _reportErrorForToken(ParserErrorCode.CONST_TYPEDEF, modifiers.constKeyword);
+ _reportErrorForToken(
+ ParserErrorCode.CONST_TYPEDEF,
+ modifiers.constKeyword);
}
if (modifiers.externalKeyword != null) {
- _reportErrorForToken(ParserErrorCode.EXTERNAL_TYPEDEF, modifiers.externalKeyword);
+ _reportErrorForToken(
+ ParserErrorCode.EXTERNAL_TYPEDEF,
+ modifiers.externalKeyword);
}
if (modifiers.finalKeyword != null) {
- _reportErrorForToken(ParserErrorCode.FINAL_TYPEDEF, modifiers.finalKeyword);
+ _reportErrorForToken(
+ ParserErrorCode.FINAL_TYPEDEF,
+ modifiers.finalKeyword);
}
if (modifiers.varKeyword != null) {
_reportErrorForToken(ParserErrorCode.VAR_TYPEDEF, modifiers.varKeyword);
}
}
}
+/**
+ * Instances of the class `SyntheticKeywordToken` implement a synthetic keyword token.
+ */
+class Parser_SyntheticKeywordToken extends KeywordToken {
+ /**
+ * Initialize a newly created token to represent the given keyword.
+ *
+ * @param keyword the keyword being represented by this token
+ * @param offset the offset from the beginning of the file to the first character in the token
+ */
+ Parser_SyntheticKeywordToken(Keyword keyword, int offset)
+ : super(keyword, offset);
+
+ @override
+ int get length => 0;
+
+ @override
+ Token copy() => new Parser_SyntheticKeywordToken(keyword, offset);
+}
+
/**
* The enumeration `ParserErrorCode` defines the error codes used for errors
@@ -7832,315 +9828,664 @@ class Parser {
* problem can be corrected.
*/
class ParserErrorCode extends ErrorCode {
- static const ParserErrorCode ABSTRACT_CLASS_MEMBER= const ParserErrorCode('ABSTRACT_CLASS_MEMBER', "Members of classes cannot be declared to be 'abstract'");
-
- static const ParserErrorCode ABSTRACT_ENUM = const ParserErrorCode('ABSTRACT_ENUM', "Enums cannot be declared to be 'abstract'");
-
- static const ParserErrorCode ABSTRACT_STATIC_METHOD = const ParserErrorCode('ABSTRACT_STATIC_METHOD', "Static methods cannot be declared to be 'abstract'");
-
- static const ParserErrorCode ABSTRACT_TOP_LEVEL_FUNCTION = const ParserErrorCode('ABSTRACT_TOP_LEVEL_FUNCTION', "Top-level functions cannot be declared to be 'abstract'");
-
- static const ParserErrorCode ABSTRACT_TOP_LEVEL_VARIABLE = const ParserErrorCode('ABSTRACT_TOP_LEVEL_VARIABLE', "Top-level variables cannot be declared to be 'abstract'");
-
- static const ParserErrorCode ABSTRACT_TYPEDEF = const ParserErrorCode('ABSTRACT_TYPEDEF', "Type aliases cannot be declared to be 'abstract'");
-
- static const ParserErrorCode ASSERT_DOES_NOT_TAKE_ASSIGNMENT = const ParserErrorCode('ASSERT_DOES_NOT_TAKE_ASSIGNMENT', "Assert cannot be called on an assignment");
-
- static const ParserErrorCode ASSERT_DOES_NOT_TAKE_CASCADE = const ParserErrorCode('ASSERT_DOES_NOT_TAKE_CASCADE', "Assert cannot be called on cascade");
-
- static const ParserErrorCode ASSERT_DOES_NOT_TAKE_THROW = const ParserErrorCode('ASSERT_DOES_NOT_TAKE_THROW', "Assert cannot be called on throws");
-
- static const ParserErrorCode ASSERT_DOES_NOT_TAKE_RETHROW = const ParserErrorCode('ASSERT_DOES_NOT_TAKE_RETHROW', "Assert cannot be called on rethrows");
-
- static const ParserErrorCode BREAK_OUTSIDE_OF_LOOP = const ParserErrorCode('BREAK_OUTSIDE_OF_LOOP', "A break statement cannot be used outside of a loop or switch statement");
-
- static const ParserErrorCode CONST_AND_FINAL = const ParserErrorCode('CONST_AND_FINAL', "Members cannot be declared to be both 'const' and 'final'");
-
- static const ParserErrorCode CONST_AND_VAR = const ParserErrorCode('CONST_AND_VAR', "Members cannot be declared to be both 'const' and 'var'");
-
- static const ParserErrorCode CONST_CLASS = const ParserErrorCode('CONST_CLASS', "Classes cannot be declared to be 'const'");
-
- static const ParserErrorCode CONST_CONSTRUCTOR_WITH_BODY = const ParserErrorCode('CONST_CONSTRUCTOR_WITH_BODY', "'const' constructors cannot have a body");
-
- static const ParserErrorCode CONST_ENUM = const ParserErrorCode('CONST_ENUM', "Enums cannot be declared to be 'const'");
-
- static const ParserErrorCode CONST_FACTORY = const ParserErrorCode('CONST_FACTORY', "Only redirecting factory constructors can be declared to be 'const'");
-
- static const ParserErrorCode CONST_METHOD = const ParserErrorCode('CONST_METHOD', "Getters, setters and methods cannot be declared to be 'const'");
-
- static const ParserErrorCode CONST_TYPEDEF = const ParserErrorCode('CONST_TYPEDEF', "Type aliases cannot be declared to be 'const'");
-
- static const ParserErrorCode CONSTRUCTOR_WITH_RETURN_TYPE = const ParserErrorCode('CONSTRUCTOR_WITH_RETURN_TYPE', "Constructors cannot have a return type");
-
- static const ParserErrorCode CONTINUE_OUTSIDE_OF_LOOP = const ParserErrorCode('CONTINUE_OUTSIDE_OF_LOOP', "A continue statement cannot be used outside of a loop or switch statement");
-
- static const ParserErrorCode CONTINUE_WITHOUT_LABEL_IN_CASE = const ParserErrorCode('CONTINUE_WITHOUT_LABEL_IN_CASE', "A continue statement in a switch statement must have a label as a target");
-
- static const ParserErrorCode DEFERRED_IMPORTS_NOT_SUPPORTED = const ParserErrorCode('DEFERRED_IMPORTS_NOT_SUPPORTED', "Deferred imports are not supported by default");
-
- static const ParserErrorCode DEPRECATED_CLASS_TYPE_ALIAS = const ParserErrorCode('DEPRECATED_CLASS_TYPE_ALIAS', "The 'typedef' mixin application was replaced with 'class'");
-
- static const ParserErrorCode DIRECTIVE_AFTER_DECLARATION = const ParserErrorCode('DIRECTIVE_AFTER_DECLARATION', "Directives must appear before any declarations");
-
- static const ParserErrorCode DUPLICATE_LABEL_IN_SWITCH_STATEMENT = const ParserErrorCode('DUPLICATE_LABEL_IN_SWITCH_STATEMENT', "The label {0} was already used in this switch statement");
-
- static const ParserErrorCode DUPLICATED_MODIFIER = const ParserErrorCode('DUPLICATED_MODIFIER', "The modifier '{0}' was already specified.");
-
- static const ParserErrorCode EMPTY_ENUM_BODY = const ParserErrorCode('EMPTY_ENUM_BODY', "An enum must declare at least one constant name");
-
- static const ParserErrorCode EQUALITY_CANNOT_BE_EQUALITY_OPERAND = const ParserErrorCode('EQUALITY_CANNOT_BE_EQUALITY_OPERAND', "Equality expression cannot be operand of another equality expression.");
-
- static const ParserErrorCode EXPECTED_CASE_OR_DEFAULT = const ParserErrorCode('EXPECTED_CASE_OR_DEFAULT', "Expected 'case' or 'default'");
-
- static const ParserErrorCode EXPECTED_CLASS_MEMBER = const ParserErrorCode('EXPECTED_CLASS_MEMBER', "Expected a class member");
-
- static const ParserErrorCode EXPECTED_EXECUTABLE = const ParserErrorCode('EXPECTED_EXECUTABLE', "Expected a method, getter, setter or operator declaration");
-
- static const ParserErrorCode EXPECTED_LIST_OR_MAP_LITERAL = const ParserErrorCode('EXPECTED_LIST_OR_MAP_LITERAL', "Expected a list or map literal");
-
- static const ParserErrorCode EXPECTED_STRING_LITERAL = const ParserErrorCode('EXPECTED_STRING_LITERAL', "Expected a string literal");
-
- static const ParserErrorCode EXPECTED_TOKEN = const ParserErrorCode('EXPECTED_TOKEN', "Expected to find '{0}'");
-
- static const ParserErrorCode EXPECTED_TYPE_NAME = const ParserErrorCode('EXPECTED_TYPE_NAME', "Expected a type name");
-
- static const ParserErrorCode EXPORT_DIRECTIVE_AFTER_PART_DIRECTIVE = const ParserErrorCode('EXPORT_DIRECTIVE_AFTER_PART_DIRECTIVE', "Export directives must preceed part directives");
-
- static const ParserErrorCode EXTERNAL_AFTER_CONST = const ParserErrorCode('EXTERNAL_AFTER_CONST', "The modifier 'external' should be before the modifier 'const'");
-
- static const ParserErrorCode EXTERNAL_AFTER_FACTORY = const ParserErrorCode('EXTERNAL_AFTER_FACTORY', "The modifier 'external' should be before the modifier 'factory'");
-
- static const ParserErrorCode EXTERNAL_AFTER_STATIC = const ParserErrorCode('EXTERNAL_AFTER_STATIC', "The modifier 'external' should be before the modifier 'static'");
-
- static const ParserErrorCode EXTERNAL_CLASS = const ParserErrorCode('EXTERNAL_CLASS', "Classes cannot be declared to be 'external'");
-
- static const ParserErrorCode EXTERNAL_CONSTRUCTOR_WITH_BODY = const ParserErrorCode('EXTERNAL_CONSTRUCTOR_WITH_BODY', "External constructors cannot have a body");
-
- static const ParserErrorCode EXTERNAL_ENUM = const ParserErrorCode('EXTERNAL_ENUM', "Enums cannot be declared to be 'external'");
-
- static const ParserErrorCode EXTERNAL_FIELD = const ParserErrorCode('EXTERNAL_FIELD', "Fields cannot be declared to be 'external'");
-
- static const ParserErrorCode EXTERNAL_GETTER_WITH_BODY = const ParserErrorCode('EXTERNAL_GETTER_WITH_BODY', "External getters cannot have a body");
-
- static const ParserErrorCode EXTERNAL_METHOD_WITH_BODY = const ParserErrorCode('EXTERNAL_METHOD_WITH_BODY', "External methods cannot have a body");
-
- static const ParserErrorCode EXTERNAL_OPERATOR_WITH_BODY = const ParserErrorCode('EXTERNAL_OPERATOR_WITH_BODY', "External operators cannot have a body");
-
- static const ParserErrorCode EXTERNAL_SETTER_WITH_BODY = const ParserErrorCode('EXTERNAL_SETTER_WITH_BODY', "External setters cannot have a body");
-
- static const ParserErrorCode EXTERNAL_TYPEDEF = const ParserErrorCode('EXTERNAL_TYPEDEF', "Type aliases cannot be declared to be 'external'");
-
- static const ParserErrorCode FACTORY_TOP_LEVEL_DECLARATION = const ParserErrorCode('FACTORY_TOP_LEVEL_DECLARATION', "Top-level declarations cannot be declared to be 'factory'");
-
- static const ParserErrorCode FACTORY_WITH_INITIALIZERS
- = const ParserErrorCode(
+ static const ParserErrorCode ABSTRACT_CLASS_MEMBER = const ParserErrorCode(
+ 'ABSTRACT_CLASS_MEMBER',
+ "Members of classes cannot be declared to be 'abstract'");
+
+ static const ParserErrorCode ABSTRACT_ENUM = const ParserErrorCode(
+ 'ABSTRACT_ENUM',
+ "Enums cannot be declared to be 'abstract'");
+
+ static const ParserErrorCode ABSTRACT_STATIC_METHOD = const ParserErrorCode(
+ 'ABSTRACT_STATIC_METHOD',
+ "Static methods cannot be declared to be 'abstract'");
+
+ static const ParserErrorCode ABSTRACT_TOP_LEVEL_FUNCTION =
+ const ParserErrorCode(
+ 'ABSTRACT_TOP_LEVEL_FUNCTION',
+ "Top-level functions cannot be declared to be 'abstract'");
+
+ static const ParserErrorCode ABSTRACT_TOP_LEVEL_VARIABLE =
+ const ParserErrorCode(
+ 'ABSTRACT_TOP_LEVEL_VARIABLE',
+ "Top-level variables cannot be declared to be 'abstract'");
+
+ static const ParserErrorCode ABSTRACT_TYPEDEF = const ParserErrorCode(
+ 'ABSTRACT_TYPEDEF',
+ "Type aliases cannot be declared to be 'abstract'");
+
+ static const ParserErrorCode ASSERT_DOES_NOT_TAKE_ASSIGNMENT =
+ const ParserErrorCode(
+ 'ASSERT_DOES_NOT_TAKE_ASSIGNMENT',
+ "Assert cannot be called on an assignment");
+
+ static const ParserErrorCode ASSERT_DOES_NOT_TAKE_CASCADE =
+ const ParserErrorCode(
+ 'ASSERT_DOES_NOT_TAKE_CASCADE',
+ "Assert cannot be called on cascade");
+
+ static const ParserErrorCode ASSERT_DOES_NOT_TAKE_THROW =
+ const ParserErrorCode(
+ 'ASSERT_DOES_NOT_TAKE_THROW',
+ "Assert cannot be called on throws");
+
+ static const ParserErrorCode ASSERT_DOES_NOT_TAKE_RETHROW =
+ const ParserErrorCode(
+ 'ASSERT_DOES_NOT_TAKE_RETHROW',
+ "Assert cannot be called on rethrows");
+
+ static const ParserErrorCode BREAK_OUTSIDE_OF_LOOP = const ParserErrorCode(
+ 'BREAK_OUTSIDE_OF_LOOP',
+ "A break statement cannot be used outside of a loop or switch statement");
+
+ static const ParserErrorCode CONST_AND_FINAL = const ParserErrorCode(
+ 'CONST_AND_FINAL',
+ "Members cannot be declared to be both 'const' and 'final'");
+
+ static const ParserErrorCode CONST_AND_VAR = const ParserErrorCode(
+ 'CONST_AND_VAR',
+ "Members cannot be declared to be both 'const' and 'var'");
+
+ static const ParserErrorCode CONST_CLASS = const ParserErrorCode(
+ 'CONST_CLASS',
+ "Classes cannot be declared to be 'const'");
+
+ static const ParserErrorCode CONST_CONSTRUCTOR_WITH_BODY =
+ const ParserErrorCode(
+ 'CONST_CONSTRUCTOR_WITH_BODY',
+ "'const' constructors cannot have a body");
+
+ static const ParserErrorCode CONST_ENUM =
+ const ParserErrorCode('CONST_ENUM', "Enums cannot be declared to be 'const'");
+
+ static const ParserErrorCode CONST_FACTORY = const ParserErrorCode(
+ 'CONST_FACTORY',
+ "Only redirecting factory constructors can be declared to be 'const'");
+
+ static const ParserErrorCode CONST_METHOD = const ParserErrorCode(
+ 'CONST_METHOD',
+ "Getters, setters and methods cannot be declared to be 'const'");
+
+ static const ParserErrorCode CONST_TYPEDEF = const ParserErrorCode(
+ 'CONST_TYPEDEF',
+ "Type aliases cannot be declared to be 'const'");
+
+ static const ParserErrorCode CONSTRUCTOR_WITH_RETURN_TYPE =
+ const ParserErrorCode(
+ 'CONSTRUCTOR_WITH_RETURN_TYPE',
+ "Constructors cannot have a return type");
+
+ static const ParserErrorCode CONTINUE_OUTSIDE_OF_LOOP = const ParserErrorCode(
+ 'CONTINUE_OUTSIDE_OF_LOOP',
+ "A continue statement cannot be used outside of a loop or switch statement");
+
+ static const ParserErrorCode CONTINUE_WITHOUT_LABEL_IN_CASE =
+ const ParserErrorCode(
+ 'CONTINUE_WITHOUT_LABEL_IN_CASE',
+ "A continue statement in a switch statement must have a label as a target");
+
+ static const ParserErrorCode DEFERRED_IMPORTS_NOT_SUPPORTED =
+ const ParserErrorCode(
+ 'DEFERRED_IMPORTS_NOT_SUPPORTED',
+ "Deferred imports are not supported by default");
+
+ static const ParserErrorCode DEPRECATED_CLASS_TYPE_ALIAS =
+ const ParserErrorCode(
+ 'DEPRECATED_CLASS_TYPE_ALIAS',
+ "The 'typedef' mixin application was replaced with 'class'");
+
+ static const ParserErrorCode DIRECTIVE_AFTER_DECLARATION =
+ const ParserErrorCode(
+ 'DIRECTIVE_AFTER_DECLARATION',
+ "Directives must appear before any declarations");
+
+ static const ParserErrorCode DUPLICATE_LABEL_IN_SWITCH_STATEMENT =
+ const ParserErrorCode(
+ 'DUPLICATE_LABEL_IN_SWITCH_STATEMENT',
+ "The label {0} was already used in this switch statement");
+
+ static const ParserErrorCode DUPLICATED_MODIFIER = const ParserErrorCode(
+ 'DUPLICATED_MODIFIER',
+ "The modifier '{0}' was already specified.");
+
+ static const ParserErrorCode EMPTY_ENUM_BODY = const ParserErrorCode(
+ 'EMPTY_ENUM_BODY',
+ "An enum must declare at least one constant name");
+
+ static const ParserErrorCode EQUALITY_CANNOT_BE_EQUALITY_OPERAND =
+ const ParserErrorCode(
+ 'EQUALITY_CANNOT_BE_EQUALITY_OPERAND',
+ "Equality expression cannot be operand of another equality expression.");
+
+ static const ParserErrorCode EXPECTED_CASE_OR_DEFAULT = const ParserErrorCode(
+ 'EXPECTED_CASE_OR_DEFAULT',
+ "Expected 'case' or 'default'");
+
+ static const ParserErrorCode EXPECTED_CLASS_MEMBER =
+ const ParserErrorCode('EXPECTED_CLASS_MEMBER', "Expected a class member");
+
+ static const ParserErrorCode EXPECTED_EXECUTABLE = const ParserErrorCode(
+ 'EXPECTED_EXECUTABLE',
+ "Expected a method, getter, setter or operator declaration");
+
+ static const ParserErrorCode EXPECTED_LIST_OR_MAP_LITERAL =
+ const ParserErrorCode(
+ 'EXPECTED_LIST_OR_MAP_LITERAL',
+ "Expected a list or map literal");
+
+ static const ParserErrorCode EXPECTED_STRING_LITERAL =
+ const ParserErrorCode('EXPECTED_STRING_LITERAL', "Expected a string literal");
+
+ static const ParserErrorCode EXPECTED_TOKEN =
+ const ParserErrorCode('EXPECTED_TOKEN', "Expected to find '{0}'");
+
+ static const ParserErrorCode EXPECTED_TYPE_NAME =
+ const ParserErrorCode('EXPECTED_TYPE_NAME', "Expected a type name");
+
+ static const ParserErrorCode EXPORT_DIRECTIVE_AFTER_PART_DIRECTIVE =
+ const ParserErrorCode(
+ 'EXPORT_DIRECTIVE_AFTER_PART_DIRECTIVE',
+ "Export directives must preceed part directives");
+
+ static const ParserErrorCode EXTERNAL_AFTER_CONST = const ParserErrorCode(
+ 'EXTERNAL_AFTER_CONST',
+ "The modifier 'external' should be before the modifier 'const'");
+
+ static const ParserErrorCode EXTERNAL_AFTER_FACTORY = const ParserErrorCode(
+ 'EXTERNAL_AFTER_FACTORY',
+ "The modifier 'external' should be before the modifier 'factory'");
+
+ static const ParserErrorCode EXTERNAL_AFTER_STATIC = const ParserErrorCode(
+ 'EXTERNAL_AFTER_STATIC',
+ "The modifier 'external' should be before the modifier 'static'");
+
+ static const ParserErrorCode EXTERNAL_CLASS = const ParserErrorCode(
+ 'EXTERNAL_CLASS',
+ "Classes cannot be declared to be 'external'");
+
+ static const ParserErrorCode EXTERNAL_CONSTRUCTOR_WITH_BODY =
+ const ParserErrorCode(
+ 'EXTERNAL_CONSTRUCTOR_WITH_BODY',
+ "External constructors cannot have a body");
+
+ static const ParserErrorCode EXTERNAL_ENUM = const ParserErrorCode(
+ 'EXTERNAL_ENUM',
+ "Enums cannot be declared to be 'external'");
+
+ static const ParserErrorCode EXTERNAL_FIELD = const ParserErrorCode(
+ 'EXTERNAL_FIELD',
+ "Fields cannot be declared to be 'external'");
+
+ static const ParserErrorCode EXTERNAL_GETTER_WITH_BODY =
+ const ParserErrorCode(
+ 'EXTERNAL_GETTER_WITH_BODY',
+ "External getters cannot have a body");
+
+ static const ParserErrorCode EXTERNAL_METHOD_WITH_BODY =
+ const ParserErrorCode(
+ 'EXTERNAL_METHOD_WITH_BODY',
+ "External methods cannot have a body");
+
+ static const ParserErrorCode EXTERNAL_OPERATOR_WITH_BODY =
+ const ParserErrorCode(
+ 'EXTERNAL_OPERATOR_WITH_BODY',
+ "External operators cannot have a body");
+
+ static const ParserErrorCode EXTERNAL_SETTER_WITH_BODY =
+ const ParserErrorCode(
+ 'EXTERNAL_SETTER_WITH_BODY',
+ "External setters cannot have a body");
+
+ static const ParserErrorCode EXTERNAL_TYPEDEF = const ParserErrorCode(
+ 'EXTERNAL_TYPEDEF',
+ "Type aliases cannot be declared to be 'external'");
+
+ static const ParserErrorCode FACTORY_TOP_LEVEL_DECLARATION =
+ const ParserErrorCode(
+ 'FACTORY_TOP_LEVEL_DECLARATION',
+ "Top-level declarations cannot be declared to be 'factory'");
+
+ static const ParserErrorCode FACTORY_WITH_INITIALIZERS =
+ const ParserErrorCode(
'FACTORY_WITH_INITIALIZERS',
"A 'factory' constructor cannot have initializers",
"Either remove the 'factory' keyword to make this a generative "
- "constructor or remove the initializers.");
-
- static const ParserErrorCode FACTORY_WITHOUT_BODY = const ParserErrorCode('FACTORY_WITHOUT_BODY', "A non-redirecting 'factory' constructor must have a body");
-
- static const ParserErrorCode FIELD_INITIALIZER_OUTSIDE_CONSTRUCTOR = const ParserErrorCode('FIELD_INITIALIZER_OUTSIDE_CONSTRUCTOR', "Field initializers can only be used in a constructor");
-
- static const ParserErrorCode FINAL_AND_VAR = const ParserErrorCode('FINAL_AND_VAR', "Members cannot be declared to be both 'final' and 'var'");
-
- static const ParserErrorCode FINAL_CLASS = const ParserErrorCode('FINAL_CLASS', "Classes cannot be declared to be 'final'");
-
- static const ParserErrorCode FINAL_CONSTRUCTOR = const ParserErrorCode('FINAL_CONSTRUCTOR', "A constructor cannot be declared to be 'final'");
-
- static const ParserErrorCode FINAL_ENUM = const ParserErrorCode('FINAL_ENUM', "Enums cannot be declared to be 'final'");
-
- static const ParserErrorCode FINAL_METHOD = const ParserErrorCode('FINAL_METHOD', "Getters, setters and methods cannot be declared to be 'final'");
-
- static const ParserErrorCode FINAL_TYPEDEF = const ParserErrorCode('FINAL_TYPEDEF', "Type aliases cannot be declared to be 'final'");
-
- static const ParserErrorCode FUNCTION_TYPED_PARAMETER_VAR = const ParserErrorCode('FUNCTION_TYPED_PARAMETER_VAR', "Function typed parameters cannot specify 'const', 'final' or 'var' instead of return type");
-
- static const ParserErrorCode GETTER_IN_FUNCTION = const ParserErrorCode('GETTER_IN_FUNCTION', "Getters cannot be defined within methods or functions");
-
- static const ParserErrorCode GETTER_WITH_PARAMETERS = const ParserErrorCode('GETTER_WITH_PARAMETERS', "Getter should be declared without a parameter list");
-
- static const ParserErrorCode ILLEGAL_ASSIGNMENT_TO_NON_ASSIGNABLE = const ParserErrorCode('ILLEGAL_ASSIGNMENT_TO_NON_ASSIGNABLE', "Illegal assignment to non-assignable expression");
-
- static const ParserErrorCode IMPLEMENTS_BEFORE_EXTENDS = const ParserErrorCode('IMPLEMENTS_BEFORE_EXTENDS', "The extends clause must be before the implements clause");
-
- static const ParserErrorCode IMPLEMENTS_BEFORE_WITH = const ParserErrorCode('IMPLEMENTS_BEFORE_WITH', "The with clause must be before the implements clause");
-
- static const ParserErrorCode IMPORT_DIRECTIVE_AFTER_PART_DIRECTIVE = const ParserErrorCode('IMPORT_DIRECTIVE_AFTER_PART_DIRECTIVE', "Import directives must preceed part directives");
-
- static const ParserErrorCode INITIALIZED_VARIABLE_IN_FOR_EACH = const ParserErrorCode('INITIALIZED_VARIABLE_IN_FOR_EACH', "The loop variable in a for-each loop cannot be initialized");
-
- static const ParserErrorCode INVALID_AWAIT_IN_FOR = const ParserErrorCode('INVALID_AWAIT_IN_FOR', "The modifier 'await' is not allowed for a normal 'for' statement", "Remove the keyword or use a for-each statement.");
-
- static const ParserErrorCode INVALID_CODE_POINT = const ParserErrorCode('INVALID_CODE_POINT', "The escape sequence '{0}' is not a valid code point");
-
- static const ParserErrorCode INVALID_COMMENT_REFERENCE = const ParserErrorCode('INVALID_COMMENT_REFERENCE', "Comment references should contain a possibly prefixed identifier and can start with 'new', but should not contain anything else");
-
- static const ParserErrorCode INVALID_HEX_ESCAPE = const ParserErrorCode('INVALID_HEX_ESCAPE', "An escape sequence starting with '\\x' must be followed by 2 hexidecimal digits");
-
- static const ParserErrorCode INVALID_OPERATOR = const ParserErrorCode('INVALID_OPERATOR', "The string '{0}' is not a valid operator");
-
- static const ParserErrorCode INVALID_OPERATOR_FOR_SUPER = const ParserErrorCode('INVALID_OPERATOR_FOR_SUPER', "The operator '{0}' cannot be used with 'super'");
-
- static const ParserErrorCode INVALID_STAR_AFTER_ASYNC = const ParserErrorCode('INVALID_STAR_AFTER_ASYNC', "The modifier 'async*' is not allowed for an expression function body", "Convert the body to a block.");
-
- static const ParserErrorCode INVALID_SYNC = const ParserErrorCode('INVALID_SYNC', "The modifier 'sync' is not allowed for an exrpression function body", "Convert the body to a block.");
-
- static const ParserErrorCode INVALID_UNICODE_ESCAPE = const ParserErrorCode('INVALID_UNICODE_ESCAPE', "An escape sequence starting with '\\u' must be followed by 4 hexidecimal digits or from 1 to 6 digits between '{' and '}'");
-
- static const ParserErrorCode LIBRARY_DIRECTIVE_NOT_FIRST = const ParserErrorCode('LIBRARY_DIRECTIVE_NOT_FIRST', "The library directive must appear before all other directives");
-
- static const ParserErrorCode LOCAL_FUNCTION_DECLARATION_MODIFIER = const ParserErrorCode('LOCAL_FUNCTION_DECLARATION_MODIFIER', "Local function declarations cannot specify any modifier");
-
- static const ParserErrorCode MISSING_ASSIGNABLE_SELECTOR = const ParserErrorCode('MISSING_ASSIGNABLE_SELECTOR', "Missing selector such as \".<identifier>\" or \"[0]\"");
-
- static const ParserErrorCode MISSING_ASSIGNMENT_IN_INITIALIZER
- = const ParserErrorCode(
+ "constructor or remove the initializers.");
+
+ static const ParserErrorCode FACTORY_WITHOUT_BODY = const ParserErrorCode(
+ 'FACTORY_WITHOUT_BODY',
+ "A non-redirecting 'factory' constructor must have a body");
+
+ static const ParserErrorCode FIELD_INITIALIZER_OUTSIDE_CONSTRUCTOR =
+ const ParserErrorCode(
+ 'FIELD_INITIALIZER_OUTSIDE_CONSTRUCTOR',
+ "Field initializers can only be used in a constructor");
+
+ static const ParserErrorCode FINAL_AND_VAR = const ParserErrorCode(
+ 'FINAL_AND_VAR',
+ "Members cannot be declared to be both 'final' and 'var'");
+
+ static const ParserErrorCode FINAL_CLASS = const ParserErrorCode(
+ 'FINAL_CLASS',
+ "Classes cannot be declared to be 'final'");
+
+ static const ParserErrorCode FINAL_CONSTRUCTOR = const ParserErrorCode(
+ 'FINAL_CONSTRUCTOR',
+ "A constructor cannot be declared to be 'final'");
+
+ static const ParserErrorCode FINAL_ENUM =
+ const ParserErrorCode('FINAL_ENUM', "Enums cannot be declared to be 'final'");
+
+ static const ParserErrorCode FINAL_METHOD = const ParserErrorCode(
+ 'FINAL_METHOD',
+ "Getters, setters and methods cannot be declared to be 'final'");
+
+ static const ParserErrorCode FINAL_TYPEDEF = const ParserErrorCode(
+ 'FINAL_TYPEDEF',
+ "Type aliases cannot be declared to be 'final'");
+
+ static const ParserErrorCode FUNCTION_TYPED_PARAMETER_VAR =
+ const ParserErrorCode(
+ 'FUNCTION_TYPED_PARAMETER_VAR',
+ "Function typed parameters cannot specify 'const', 'final' or 'var' instead of return type");
+
+ static const ParserErrorCode GETTER_IN_FUNCTION = const ParserErrorCode(
+ 'GETTER_IN_FUNCTION',
+ "Getters cannot be defined within methods or functions");
+
+ static const ParserErrorCode GETTER_WITH_PARAMETERS = const ParserErrorCode(
+ 'GETTER_WITH_PARAMETERS',
+ "Getter should be declared without a parameter list");
+
+ static const ParserErrorCode ILLEGAL_ASSIGNMENT_TO_NON_ASSIGNABLE =
+ const ParserErrorCode(
+ 'ILLEGAL_ASSIGNMENT_TO_NON_ASSIGNABLE',
+ "Illegal assignment to non-assignable expression");
+
+ static const ParserErrorCode IMPLEMENTS_BEFORE_EXTENDS =
+ const ParserErrorCode(
+ 'IMPLEMENTS_BEFORE_EXTENDS',
+ "The extends clause must be before the implements clause");
+
+ static const ParserErrorCode IMPLEMENTS_BEFORE_WITH = const ParserErrorCode(
+ 'IMPLEMENTS_BEFORE_WITH',
+ "The with clause must be before the implements clause");
+
+ static const ParserErrorCode IMPORT_DIRECTIVE_AFTER_PART_DIRECTIVE =
+ const ParserErrorCode(
+ 'IMPORT_DIRECTIVE_AFTER_PART_DIRECTIVE',
+ "Import directives must preceed part directives");
+
+ static const ParserErrorCode INITIALIZED_VARIABLE_IN_FOR_EACH =
+ const ParserErrorCode(
+ 'INITIALIZED_VARIABLE_IN_FOR_EACH',
+ "The loop variable in a for-each loop cannot be initialized");
+
+ static const ParserErrorCode INVALID_AWAIT_IN_FOR = const ParserErrorCode(
+ 'INVALID_AWAIT_IN_FOR',
+ "The modifier 'await' is not allowed for a normal 'for' statement",
+ "Remove the keyword or use a for-each statement.");
+
+ static const ParserErrorCode INVALID_CODE_POINT = const ParserErrorCode(
+ 'INVALID_CODE_POINT',
+ "The escape sequence '{0}' is not a valid code point");
+
+ static const ParserErrorCode INVALID_COMMENT_REFERENCE =
+ const ParserErrorCode(
+ 'INVALID_COMMENT_REFERENCE',
+ "Comment references should contain a possibly prefixed identifier and can start with 'new', but should not contain anything else");
+
+ static const ParserErrorCode INVALID_HEX_ESCAPE = const ParserErrorCode(
+ 'INVALID_HEX_ESCAPE',
+ "An escape sequence starting with '\\x' must be followed by 2 hexidecimal digits");
+
+ static const ParserErrorCode INVALID_OPERATOR = const ParserErrorCode(
+ 'INVALID_OPERATOR',
+ "The string '{0}' is not a valid operator");
+
+ static const ParserErrorCode INVALID_OPERATOR_FOR_SUPER =
+ const ParserErrorCode(
+ 'INVALID_OPERATOR_FOR_SUPER',
+ "The operator '{0}' cannot be used with 'super'");
+
+ static const ParserErrorCode INVALID_STAR_AFTER_ASYNC = const ParserErrorCode(
+ 'INVALID_STAR_AFTER_ASYNC',
+ "The modifier 'async*' is not allowed for an expression function body",
+ "Convert the body to a block.");
+
+ static const ParserErrorCode INVALID_SYNC = const ParserErrorCode(
+ 'INVALID_SYNC',
+ "The modifier 'sync' is not allowed for an exrpression function body",
+ "Convert the body to a block.");
+
+ static const ParserErrorCode INVALID_UNICODE_ESCAPE = const ParserErrorCode(
+ 'INVALID_UNICODE_ESCAPE',
+ "An escape sequence starting with '\\u' must be followed by 4 hexidecimal digits or from 1 to 6 digits between '{' and '}'");
+
+ static const ParserErrorCode LIBRARY_DIRECTIVE_NOT_FIRST =
+ const ParserErrorCode(
+ 'LIBRARY_DIRECTIVE_NOT_FIRST',
+ "The library directive must appear before all other directives");
+
+ static const ParserErrorCode LOCAL_FUNCTION_DECLARATION_MODIFIER =
+ const ParserErrorCode(
+ 'LOCAL_FUNCTION_DECLARATION_MODIFIER',
+ "Local function declarations cannot specify any modifier");
+
+ static const ParserErrorCode MISSING_ASSIGNABLE_SELECTOR =
+ const ParserErrorCode(
+ 'MISSING_ASSIGNABLE_SELECTOR',
+ "Missing selector such as \".<identifier>\" or \"[0]\"");
+
+ static const ParserErrorCode MISSING_ASSIGNMENT_IN_INITIALIZER =
+ const ParserErrorCode(
'MISSING_ASSIGNMENT_IN_INITIALIZER',
"Expected an assignment after the field name");
- static const ParserErrorCode MISSING_CATCH_OR_FINALLY = const ParserErrorCode('MISSING_CATCH_OR_FINALLY', "A try statement must have either a catch or finally clause");
+ static const ParserErrorCode MISSING_CATCH_OR_FINALLY = const ParserErrorCode(
+ 'MISSING_CATCH_OR_FINALLY',
+ "A try statement must have either a catch or finally clause");
- static const ParserErrorCode MISSING_CLASS_BODY = const ParserErrorCode('MISSING_CLASS_BODY', "A class definition must have a body, even if it is empty");
+ static const ParserErrorCode MISSING_CLASS_BODY = const ParserErrorCode(
+ 'MISSING_CLASS_BODY',
+ "A class definition must have a body, even if it is empty");
- static const ParserErrorCode MISSING_CLOSING_PARENTHESIS = const ParserErrorCode('MISSING_CLOSING_PARENTHESIS', "The closing parenthesis is missing");
+ static const ParserErrorCode MISSING_CLOSING_PARENTHESIS =
+ const ParserErrorCode(
+ 'MISSING_CLOSING_PARENTHESIS',
+ "The closing parenthesis is missing");
- static const ParserErrorCode MISSING_CONST_FINAL_VAR_OR_TYPE = const ParserErrorCode('MISSING_CONST_FINAL_VAR_OR_TYPE', "Variables must be declared using the keywords 'const', 'final', 'var' or a type name");
+ static const ParserErrorCode MISSING_CONST_FINAL_VAR_OR_TYPE =
+ const ParserErrorCode(
+ 'MISSING_CONST_FINAL_VAR_OR_TYPE',
+ "Variables must be declared using the keywords 'const', 'final', 'var' or a type name");
- static const ParserErrorCode MISSING_ENUM_BODY = const ParserErrorCode('MISSING_ENUM_BODY', "An enum definition must have a body with at least one constant name");
+ static const ParserErrorCode MISSING_ENUM_BODY = const ParserErrorCode(
+ 'MISSING_ENUM_BODY',
+ "An enum definition must have a body with at least one constant name");
- static const ParserErrorCode MISSING_EXPRESSION_IN_INITIALIZER
- = const ParserErrorCode(
+ static const ParserErrorCode MISSING_EXPRESSION_IN_INITIALIZER =
+ const ParserErrorCode(
'MISSING_EXPRESSION_IN_INITIALIZER',
"Expected an expression after the assignment operator");
- static const ParserErrorCode MISSING_EXPRESSION_IN_THROW = const ParserErrorCode('MISSING_EXPRESSION_IN_THROW', "Throw expressions must compute the object to be thrown");
-
- static const ParserErrorCode MISSING_FUNCTION_BODY = const ParserErrorCode('MISSING_FUNCTION_BODY', "A function body must be provided");
-
- static const ParserErrorCode MISSING_FUNCTION_PARAMETERS = const ParserErrorCode('MISSING_FUNCTION_PARAMETERS', "Functions must have an explicit list of parameters");
-
- static const ParserErrorCode MISSING_GET = const ParserErrorCode('MISSING_GET', "Getters must have the keyword 'get' before the getter name");
-
- static const ParserErrorCode MISSING_IDENTIFIER = const ParserErrorCode('MISSING_IDENTIFIER', "Expected an identifier");
-
- static const ParserErrorCode MISSING_INITIALIZER
- = const ParserErrorCode('MISSING_INITIALIZER', "Expected an initializer");
-
- static const ParserErrorCode MISSING_KEYWORD_OPERATOR = const ParserErrorCode('MISSING_KEYWORD_OPERATOR', "Operator declarations must be preceeded by the keyword 'operator'");
-
- static const ParserErrorCode MISSING_NAME_IN_LIBRARY_DIRECTIVE = const ParserErrorCode('MISSING_NAME_IN_LIBRARY_DIRECTIVE', "Library directives must include a library name");
-
- static const ParserErrorCode MISSING_NAME_IN_PART_OF_DIRECTIVE = const ParserErrorCode('MISSING_NAME_IN_PART_OF_DIRECTIVE', "Library directives must include a library name");
-
- static const ParserErrorCode MISSING_PREFIX_IN_DEFERRED_IMPORT = const ParserErrorCode('MISSING_PREFIX_IN_DEFERRED_IMPORT', "Deferred imports must have a prefix");
-
- static const ParserErrorCode MISSING_STAR_AFTER_SYNC = const ParserErrorCode('MISSING_STAR_AFTER_SYNC', "The modifier 'sync' must be followed by a star ('*')", "Remove the modifier or add a star.");
-
- static const ParserErrorCode MISSING_STATEMENT = const ParserErrorCode('MISSING_STATEMENT', "Expected a statement");
-
- static const ParserErrorCode MISSING_TERMINATOR_FOR_PARAMETER_GROUP = const ParserErrorCode('MISSING_TERMINATOR_FOR_PARAMETER_GROUP', "There is no '{0}' to close the parameter group");
-
- static const ParserErrorCode MISSING_TYPEDEF_PARAMETERS = const ParserErrorCode('MISSING_TYPEDEF_PARAMETERS', "Type aliases for functions must have an explicit list of parameters");
-
- static const ParserErrorCode MISSING_VARIABLE_IN_FOR_EACH = const ParserErrorCode('MISSING_VARIABLE_IN_FOR_EACH', "A loop variable must be declared in a for-each loop before the 'in', but none were found");
-
- static const ParserErrorCode MIXED_PARAMETER_GROUPS = const ParserErrorCode('MIXED_PARAMETER_GROUPS', "Cannot have both positional and named parameters in a single parameter list");
-
- static const ParserErrorCode MULTIPLE_EXTENDS_CLAUSES = const ParserErrorCode('MULTIPLE_EXTENDS_CLAUSES', "Each class definition can have at most one extends clause");
-
- static const ParserErrorCode MULTIPLE_IMPLEMENTS_CLAUSES = const ParserErrorCode('MULTIPLE_IMPLEMENTS_CLAUSES', "Each class definition can have at most one implements clause");
-
- static const ParserErrorCode MULTIPLE_LIBRARY_DIRECTIVES = const ParserErrorCode('MULTIPLE_LIBRARY_DIRECTIVES', "Only one library directive may be declared in a file");
-
- static const ParserErrorCode MULTIPLE_NAMED_PARAMETER_GROUPS = const ParserErrorCode('MULTIPLE_NAMED_PARAMETER_GROUPS', "Cannot have multiple groups of named parameters in a single parameter list");
-
- static const ParserErrorCode MULTIPLE_PART_OF_DIRECTIVES = const ParserErrorCode('MULTIPLE_PART_OF_DIRECTIVES', "Only one part-of directive may be declared in a file");
-
- static const ParserErrorCode MULTIPLE_POSITIONAL_PARAMETER_GROUPS = const ParserErrorCode('MULTIPLE_POSITIONAL_PARAMETER_GROUPS', "Cannot have multiple groups of positional parameters in a single parameter list");
-
- static const ParserErrorCode MULTIPLE_VARIABLES_IN_FOR_EACH = const ParserErrorCode('MULTIPLE_VARIABLES_IN_FOR_EACH', "A single loop variable must be declared in a for-each loop before the 'in', but {0} were found");
-
- static const ParserErrorCode MULTIPLE_WITH_CLAUSES = const ParserErrorCode('MULTIPLE_WITH_CLAUSES', "Each class definition can have at most one with clause");
-
- static const ParserErrorCode NAMED_FUNCTION_EXPRESSION = const ParserErrorCode('NAMED_FUNCTION_EXPRESSION', "Function expressions cannot be named");
-
- static const ParserErrorCode NAMED_PARAMETER_OUTSIDE_GROUP = const ParserErrorCode('NAMED_PARAMETER_OUTSIDE_GROUP', "Named parameters must be enclosed in curly braces ('{' and '}')");
-
- static const ParserErrorCode NATIVE_CLAUSE_IN_NON_SDK_CODE = const ParserErrorCode('NATIVE_CLAUSE_IN_NON_SDK_CODE', "Native clause can only be used in the SDK and code that is loaded through native extensions");
-
- static const ParserErrorCode NATIVE_FUNCTION_BODY_IN_NON_SDK_CODE = const ParserErrorCode('NATIVE_FUNCTION_BODY_IN_NON_SDK_CODE', "Native functions can only be declared in the SDK and code that is loaded through native extensions");
-
- static const ParserErrorCode NON_CONSTRUCTOR_FACTORY = const ParserErrorCode('NON_CONSTRUCTOR_FACTORY', "Only constructors can be declared to be a 'factory'");
-
- static const ParserErrorCode NON_IDENTIFIER_LIBRARY_NAME = const ParserErrorCode('NON_IDENTIFIER_LIBRARY_NAME', "The name of a library must be an identifier");
+ static const ParserErrorCode MISSING_EXPRESSION_IN_THROW =
+ const ParserErrorCode(
+ 'MISSING_EXPRESSION_IN_THROW',
+ "Throw expressions must compute the object to be thrown");
+
+ static const ParserErrorCode MISSING_FUNCTION_BODY = const ParserErrorCode(
+ 'MISSING_FUNCTION_BODY',
+ "A function body must be provided");
+
+ static const ParserErrorCode MISSING_FUNCTION_PARAMETERS =
+ const ParserErrorCode(
+ 'MISSING_FUNCTION_PARAMETERS',
+ "Functions must have an explicit list of parameters");
+
+ static const ParserErrorCode MISSING_GET = const ParserErrorCode(
+ 'MISSING_GET',
+ "Getters must have the keyword 'get' before the getter name");
+
+ static const ParserErrorCode MISSING_IDENTIFIER =
+ const ParserErrorCode('MISSING_IDENTIFIER', "Expected an identifier");
+
+ static const ParserErrorCode MISSING_INITIALIZER =
+ const ParserErrorCode('MISSING_INITIALIZER', "Expected an initializer");
+
+ static const ParserErrorCode MISSING_KEYWORD_OPERATOR = const ParserErrorCode(
+ 'MISSING_KEYWORD_OPERATOR',
+ "Operator declarations must be preceeded by the keyword 'operator'");
+
+ static const ParserErrorCode MISSING_NAME_IN_LIBRARY_DIRECTIVE =
+ const ParserErrorCode(
+ 'MISSING_NAME_IN_LIBRARY_DIRECTIVE',
+ "Library directives must include a library name");
+
+ static const ParserErrorCode MISSING_NAME_IN_PART_OF_DIRECTIVE =
+ const ParserErrorCode(
+ 'MISSING_NAME_IN_PART_OF_DIRECTIVE',
+ "Library directives must include a library name");
+
+ static const ParserErrorCode MISSING_PREFIX_IN_DEFERRED_IMPORT =
+ const ParserErrorCode(
+ 'MISSING_PREFIX_IN_DEFERRED_IMPORT',
+ "Deferred imports must have a prefix");
+
+ static const ParserErrorCode MISSING_STAR_AFTER_SYNC = const ParserErrorCode(
+ 'MISSING_STAR_AFTER_SYNC',
+ "The modifier 'sync' must be followed by a star ('*')",
+ "Remove the modifier or add a star.");
+
+ static const ParserErrorCode MISSING_STATEMENT =
+ const ParserErrorCode('MISSING_STATEMENT', "Expected a statement");
+
+ static const ParserErrorCode MISSING_TERMINATOR_FOR_PARAMETER_GROUP =
+ const ParserErrorCode(
+ 'MISSING_TERMINATOR_FOR_PARAMETER_GROUP',
+ "There is no '{0}' to close the parameter group");
+
+ static const ParserErrorCode MISSING_TYPEDEF_PARAMETERS =
+ const ParserErrorCode(
+ 'MISSING_TYPEDEF_PARAMETERS',
+ "Type aliases for functions must have an explicit list of parameters");
+
+ static const ParserErrorCode MISSING_VARIABLE_IN_FOR_EACH =
+ const ParserErrorCode(
+ 'MISSING_VARIABLE_IN_FOR_EACH',
+ "A loop variable must be declared in a for-each loop before the 'in', but none were found");
+
+ static const ParserErrorCode MIXED_PARAMETER_GROUPS = const ParserErrorCode(
+ 'MIXED_PARAMETER_GROUPS',
+ "Cannot have both positional and named parameters in a single parameter list");
+
+ static const ParserErrorCode MULTIPLE_EXTENDS_CLAUSES = const ParserErrorCode(
+ 'MULTIPLE_EXTENDS_CLAUSES',
+ "Each class definition can have at most one extends clause");
+
+ static const ParserErrorCode MULTIPLE_IMPLEMENTS_CLAUSES =
+ const ParserErrorCode(
+ 'MULTIPLE_IMPLEMENTS_CLAUSES',
+ "Each class definition can have at most one implements clause");
+
+ static const ParserErrorCode MULTIPLE_LIBRARY_DIRECTIVES =
+ const ParserErrorCode(
+ 'MULTIPLE_LIBRARY_DIRECTIVES',
+ "Only one library directive may be declared in a file");
+
+ static const ParserErrorCode MULTIPLE_NAMED_PARAMETER_GROUPS =
+ const ParserErrorCode(
+ 'MULTIPLE_NAMED_PARAMETER_GROUPS',
+ "Cannot have multiple groups of named parameters in a single parameter list");
+
+ static const ParserErrorCode MULTIPLE_PART_OF_DIRECTIVES =
+ const ParserErrorCode(
+ 'MULTIPLE_PART_OF_DIRECTIVES',
+ "Only one part-of directive may be declared in a file");
+
+ static const ParserErrorCode MULTIPLE_POSITIONAL_PARAMETER_GROUPS =
+ const ParserErrorCode(
+ 'MULTIPLE_POSITIONAL_PARAMETER_GROUPS',
+ "Cannot have multiple groups of positional parameters in a single parameter list");
+
+ static const ParserErrorCode MULTIPLE_VARIABLES_IN_FOR_EACH =
+ const ParserErrorCode(
+ 'MULTIPLE_VARIABLES_IN_FOR_EACH',
+ "A single loop variable must be declared in a for-each loop before the 'in', but {0} were found");
+
+ static const ParserErrorCode MULTIPLE_WITH_CLAUSES = const ParserErrorCode(
+ 'MULTIPLE_WITH_CLAUSES',
+ "Each class definition can have at most one with clause");
+
+ static const ParserErrorCode NAMED_FUNCTION_EXPRESSION =
+ const ParserErrorCode(
+ 'NAMED_FUNCTION_EXPRESSION',
+ "Function expressions cannot be named");
+
+ static const ParserErrorCode NAMED_PARAMETER_OUTSIDE_GROUP =
+ const ParserErrorCode(
+ 'NAMED_PARAMETER_OUTSIDE_GROUP',
+ "Named parameters must be enclosed in curly braces ('{' and '}')");
+
+ static const ParserErrorCode NATIVE_CLAUSE_IN_NON_SDK_CODE =
+ const ParserErrorCode(
+ 'NATIVE_CLAUSE_IN_NON_SDK_CODE',
+ "Native clause can only be used in the SDK and code that is loaded through native extensions");
+
+ static const ParserErrorCode NATIVE_FUNCTION_BODY_IN_NON_SDK_CODE =
+ const ParserErrorCode(
+ 'NATIVE_FUNCTION_BODY_IN_NON_SDK_CODE',
+ "Native functions can only be declared in the SDK and code that is loaded through native extensions");
+
+ static const ParserErrorCode NON_CONSTRUCTOR_FACTORY = const ParserErrorCode(
+ 'NON_CONSTRUCTOR_FACTORY',
+ "Only constructors can be declared to be a 'factory'");
+
+ static const ParserErrorCode NON_IDENTIFIER_LIBRARY_NAME =
+ const ParserErrorCode(
+ 'NON_IDENTIFIER_LIBRARY_NAME',
+ "The name of a library must be an identifier");
+
+ static const ParserErrorCode NON_PART_OF_DIRECTIVE_IN_PART =
+ const ParserErrorCode(
+ 'NON_PART_OF_DIRECTIVE_IN_PART',
+ "The part-of directive must be the only directive in a part");
+
+ static const ParserErrorCode NON_USER_DEFINABLE_OPERATOR =
+ const ParserErrorCode(
+ 'NON_USER_DEFINABLE_OPERATOR',
+ "The operator '{0}' is not user definable");
+
+ static const ParserErrorCode NORMAL_BEFORE_OPTIONAL_PARAMETERS =
+ const ParserErrorCode(
+ 'NORMAL_BEFORE_OPTIONAL_PARAMETERS',
+ "Normal parameters must occur before optional parameters");
+
+ static const ParserErrorCode POSITIONAL_AFTER_NAMED_ARGUMENT =
+ const ParserErrorCode(
+ 'POSITIONAL_AFTER_NAMED_ARGUMENT',
+ "Positional arguments must occur before named arguments");
+
+ static const ParserErrorCode POSITIONAL_PARAMETER_OUTSIDE_GROUP =
+ const ParserErrorCode(
+ 'POSITIONAL_PARAMETER_OUTSIDE_GROUP',
+ "Positional parameters must be enclosed in square brackets ('[' and ']')");
+
+ static const ParserErrorCode REDIRECTION_IN_NON_FACTORY_CONSTRUCTOR =
+ const ParserErrorCode(
+ 'REDIRECTION_IN_NON_FACTORY_CONSTRUCTOR',
+ "Only factory constructor can specify '=' redirection.");
+
+ static const ParserErrorCode SETTER_IN_FUNCTION = const ParserErrorCode(
+ 'SETTER_IN_FUNCTION',
+ "Setters cannot be defined within methods or functions");
+
+ static const ParserErrorCode STATIC_AFTER_CONST = const ParserErrorCode(
+ 'STATIC_AFTER_CONST',
+ "The modifier 'static' should be before the modifier 'const'");
+
+ static const ParserErrorCode STATIC_AFTER_FINAL = const ParserErrorCode(
+ 'STATIC_AFTER_FINAL',
+ "The modifier 'static' should be before the modifier 'final'");
+
+ static const ParserErrorCode STATIC_AFTER_VAR = const ParserErrorCode(
+ 'STATIC_AFTER_VAR',
+ "The modifier 'static' should be before the modifier 'var'");
+
+ static const ParserErrorCode STATIC_CONSTRUCTOR =
+ const ParserErrorCode('STATIC_CONSTRUCTOR', "Constructors cannot be static");
+
+ static const ParserErrorCode STATIC_GETTER_WITHOUT_BODY =
+ const ParserErrorCode(
+ 'STATIC_GETTER_WITHOUT_BODY',
+ "A 'static' getter must have a body");
+
+ static const ParserErrorCode STATIC_OPERATOR =
+ const ParserErrorCode('STATIC_OPERATOR', "Operators cannot be static");
+
+ static const ParserErrorCode STATIC_SETTER_WITHOUT_BODY =
+ const ParserErrorCode(
+ 'STATIC_SETTER_WITHOUT_BODY',
+ "A 'static' setter must have a body");
+
+ static const ParserErrorCode STATIC_TOP_LEVEL_DECLARATION =
+ const ParserErrorCode(
+ 'STATIC_TOP_LEVEL_DECLARATION',
+ "Top-level declarations cannot be declared to be 'static'");
+
+ static const ParserErrorCode SWITCH_HAS_CASE_AFTER_DEFAULT_CASE =
+ const ParserErrorCode(
+ 'SWITCH_HAS_CASE_AFTER_DEFAULT_CASE',
+ "The 'default' case should be the last case in a switch statement");
+
+ static const ParserErrorCode SWITCH_HAS_MULTIPLE_DEFAULT_CASES =
+ const ParserErrorCode(
+ 'SWITCH_HAS_MULTIPLE_DEFAULT_CASES',
+ "The 'default' case can only be declared once");
+
+ static const ParserErrorCode TOP_LEVEL_OPERATOR = const ParserErrorCode(
+ 'TOP_LEVEL_OPERATOR',
+ "Operators must be declared within a class");
+
+ static const ParserErrorCode UNEXPECTED_TERMINATOR_FOR_PARAMETER_GROUP =
+ const ParserErrorCode(
+ 'UNEXPECTED_TERMINATOR_FOR_PARAMETER_GROUP',
+ "There is no '{0}' to open a parameter group");
+
+ static const ParserErrorCode UNEXPECTED_TOKEN =
+ const ParserErrorCode('UNEXPECTED_TOKEN', "Unexpected token '{0}'");
+
+ static const ParserErrorCode WITH_BEFORE_EXTENDS = const ParserErrorCode(
+ 'WITH_BEFORE_EXTENDS',
+ "The extends clause must be before the with clause");
+
+ static const ParserErrorCode WITH_WITHOUT_EXTENDS = const ParserErrorCode(
+ 'WITH_WITHOUT_EXTENDS',
+ "The with clause cannot be used without an extends clause");
+
+ static const ParserErrorCode WRONG_SEPARATOR_FOR_NAMED_PARAMETER =
+ const ParserErrorCode(
+ 'WRONG_SEPARATOR_FOR_NAMED_PARAMETER',
+ "The default value of a named parameter should be preceeded by ':'");
+
+ static const ParserErrorCode WRONG_SEPARATOR_FOR_POSITIONAL_PARAMETER =
+ const ParserErrorCode(
+ 'WRONG_SEPARATOR_FOR_POSITIONAL_PARAMETER',
+ "The default value of a positional parameter should be preceeded by '='");
+
+ static const ParserErrorCode WRONG_TERMINATOR_FOR_PARAMETER_GROUP =
+ const ParserErrorCode(
+ 'WRONG_TERMINATOR_FOR_PARAMETER_GROUP',
+ "Expected '{0}' to close parameter group");
- static const ParserErrorCode NON_PART_OF_DIRECTIVE_IN_PART = const ParserErrorCode('NON_PART_OF_DIRECTIVE_IN_PART', "The part-of directive must be the only directive in a part");
+ static const ParserErrorCode VAR_AND_TYPE = const ParserErrorCode(
+ 'VAR_AND_TYPE',
+ "Variables cannot be declared using both 'var' and a type name; remove the 'var'");
- static const ParserErrorCode NON_USER_DEFINABLE_OPERATOR = const ParserErrorCode('NON_USER_DEFINABLE_OPERATOR', "The operator '{0}' is not user definable");
+ static const ParserErrorCode VAR_AS_TYPE_NAME = const ParserErrorCode(
+ 'VAR_AS_TYPE_NAME',
+ "The keyword 'var' cannot be used as a type name");
- static const ParserErrorCode NORMAL_BEFORE_OPTIONAL_PARAMETERS = const ParserErrorCode('NORMAL_BEFORE_OPTIONAL_PARAMETERS', "Normal parameters must occur before optional parameters");
+ static const ParserErrorCode VAR_CLASS =
+ const ParserErrorCode('VAR_CLASS', "Classes cannot be declared to be 'var'");
- static const ParserErrorCode POSITIONAL_AFTER_NAMED_ARGUMENT = const ParserErrorCode('POSITIONAL_AFTER_NAMED_ARGUMENT', "Positional arguments must occur before named arguments");
+ static const ParserErrorCode VAR_ENUM =
+ const ParserErrorCode('VAR_ENUM', "Enums cannot be declared to be 'var'");
- static const ParserErrorCode POSITIONAL_PARAMETER_OUTSIDE_GROUP = const ParserErrorCode('POSITIONAL_PARAMETER_OUTSIDE_GROUP', "Positional parameters must be enclosed in square brackets ('[' and ']')");
+ static const ParserErrorCode VAR_RETURN_TYPE =
+ const ParserErrorCode('VAR_RETURN_TYPE', "The return type cannot be 'var'");
- static const ParserErrorCode REDIRECTION_IN_NON_FACTORY_CONSTRUCTOR = const ParserErrorCode('REDIRECTION_IN_NON_FACTORY_CONSTRUCTOR', "Only factory constructor can specify '=' redirection.");
+ static const ParserErrorCode VAR_TYPEDEF = const ParserErrorCode(
+ 'VAR_TYPEDEF',
+ "Type aliases cannot be declared to be 'var'");
- static const ParserErrorCode SETTER_IN_FUNCTION = const ParserErrorCode('SETTER_IN_FUNCTION', "Setters cannot be defined within methods or functions");
+ static const ParserErrorCode VOID_PARAMETER = const ParserErrorCode(
+ 'VOID_PARAMETER',
+ "Parameters cannot have a type of 'void'");
- static const ParserErrorCode STATIC_AFTER_CONST = const ParserErrorCode('STATIC_AFTER_CONST', "The modifier 'static' should be before the modifier 'const'");
-
- static const ParserErrorCode STATIC_AFTER_FINAL = const ParserErrorCode('STATIC_AFTER_FINAL', "The modifier 'static' should be before the modifier 'final'");
-
- static const ParserErrorCode STATIC_AFTER_VAR = const ParserErrorCode('STATIC_AFTER_VAR', "The modifier 'static' should be before the modifier 'var'");
-
- static const ParserErrorCode STATIC_CONSTRUCTOR = const ParserErrorCode('STATIC_CONSTRUCTOR', "Constructors cannot be static");
-
- static const ParserErrorCode STATIC_GETTER_WITHOUT_BODY = const ParserErrorCode('STATIC_GETTER_WITHOUT_BODY', "A 'static' getter must have a body");
-
- static const ParserErrorCode STATIC_OPERATOR = const ParserErrorCode('STATIC_OPERATOR', "Operators cannot be static");
-
- static const ParserErrorCode STATIC_SETTER_WITHOUT_BODY = const ParserErrorCode('STATIC_SETTER_WITHOUT_BODY', "A 'static' setter must have a body");
-
- static const ParserErrorCode STATIC_TOP_LEVEL_DECLARATION = const ParserErrorCode('STATIC_TOP_LEVEL_DECLARATION', "Top-level declarations cannot be declared to be 'static'");
-
- static const ParserErrorCode SWITCH_HAS_CASE_AFTER_DEFAULT_CASE = const ParserErrorCode('SWITCH_HAS_CASE_AFTER_DEFAULT_CASE', "The 'default' case should be the last case in a switch statement");
-
- static const ParserErrorCode SWITCH_HAS_MULTIPLE_DEFAULT_CASES = const ParserErrorCode('SWITCH_HAS_MULTIPLE_DEFAULT_CASES', "The 'default' case can only be declared once");
-
- static const ParserErrorCode TOP_LEVEL_OPERATOR = const ParserErrorCode('TOP_LEVEL_OPERATOR', "Operators must be declared within a class");
-
- static const ParserErrorCode UNEXPECTED_TERMINATOR_FOR_PARAMETER_GROUP = const ParserErrorCode('UNEXPECTED_TERMINATOR_FOR_PARAMETER_GROUP', "There is no '{0}' to open a parameter group");
-
- static const ParserErrorCode UNEXPECTED_TOKEN = const ParserErrorCode('UNEXPECTED_TOKEN', "Unexpected token '{0}'");
-
- static const ParserErrorCode WITH_BEFORE_EXTENDS = const ParserErrorCode('WITH_BEFORE_EXTENDS', "The extends clause must be before the with clause");
-
- static const ParserErrorCode WITH_WITHOUT_EXTENDS = const ParserErrorCode('WITH_WITHOUT_EXTENDS', "The with clause cannot be used without an extends clause");
-
- static const ParserErrorCode WRONG_SEPARATOR_FOR_NAMED_PARAMETER = const ParserErrorCode('WRONG_SEPARATOR_FOR_NAMED_PARAMETER', "The default value of a named parameter should be preceeded by ':'");
-
- static const ParserErrorCode WRONG_SEPARATOR_FOR_POSITIONAL_PARAMETER = const ParserErrorCode('WRONG_SEPARATOR_FOR_POSITIONAL_PARAMETER', "The default value of a positional parameter should be preceeded by '='");
-
- static const ParserErrorCode WRONG_TERMINATOR_FOR_PARAMETER_GROUP = const ParserErrorCode('WRONG_TERMINATOR_FOR_PARAMETER_GROUP', "Expected '{0}' to close parameter group");
-
- static const ParserErrorCode VAR_AND_TYPE = const ParserErrorCode('VAR_AND_TYPE', "Variables cannot be declared using both 'var' and a type name; remove the 'var'");
-
- static const ParserErrorCode VAR_AS_TYPE_NAME = const ParserErrorCode('VAR_AS_TYPE_NAME', "The keyword 'var' cannot be used as a type name");
-
- static const ParserErrorCode VAR_CLASS = const ParserErrorCode('VAR_CLASS', "Classes cannot be declared to be 'var'");
-
- static const ParserErrorCode VAR_ENUM = const ParserErrorCode('VAR_ENUM', "Enums cannot be declared to be 'var'");
-
- static const ParserErrorCode VAR_RETURN_TYPE = const ParserErrorCode('VAR_RETURN_TYPE', "The return type cannot be 'var'");
-
- static const ParserErrorCode VAR_TYPEDEF = const ParserErrorCode('VAR_TYPEDEF', "Type aliases cannot be declared to be 'var'");
-
- static const ParserErrorCode VOID_PARAMETER = const ParserErrorCode('VOID_PARAMETER', "Parameters cannot have a type of 'void'");
-
- static const ParserErrorCode VOID_VARIABLE = const ParserErrorCode('VOID_VARIABLE', "Variables cannot have a type of 'void'");
+ static const ParserErrorCode VOID_VARIABLE = const ParserErrorCode(
+ 'VOID_VARIABLE',
+ "Variables cannot have a type of 'void'");
/**
* Initialize a newly created error code to have the given [name]. The message
@@ -8158,24 +10503,6 @@ class ParserErrorCode extends ErrorCode {
ErrorType get type => ErrorType.SYNTACTIC_ERROR;
}
-/**
- * Instances of the class `SyntheticKeywordToken` implement a synthetic keyword token.
- */
-class Parser_SyntheticKeywordToken extends KeywordToken {
- /**
- * Initialize a newly created token to represent the given keyword.
- *
- * @param keyword the keyword being represented by this token
- * @param offset the offset from the beginning of the file to the first character in the token
- */
- Parser_SyntheticKeywordToken(Keyword keyword, int offset) : super(keyword, offset);
-
- @override
- Token copy() => new Parser_SyntheticKeywordToken(keyword, offset);
-
- @override
- int get length => 0;
-}
/**
* Instances of the class `ResolutionCopier` copies resolution information from one AST
@@ -8184,17 +10511,6 @@ class Parser_SyntheticKeywordToken extends KeywordToken {
*/
class ResolutionCopier implements AstVisitor<bool> {
/**
- * Copy resolution data from one node to another.
- *
- * @param fromNode the node from which resolution information will be copied
- * @param toNode the node to which resolution information will be copied
- */
- static void copyResolutionData(AstNode fromNode, AstNode toNode) {
- ResolutionCopier copier = new ResolutionCopier();
- copier._isEqualNodes(fromNode, toNode);
- }
-
- /**
* The AST node with which the node being visited is to be compared. This is only valid at the
* beginning of each visit method (until [isEqualNodes] is invoked).
*/
@@ -8465,7 +10781,8 @@ class ResolutionCopier implements AstVisitor<bool> {
@override
bool visitConstructorFieldInitializer(ConstructorFieldInitializer node) {
- ConstructorFieldInitializer toNode = this._toNode as ConstructorFieldInitializer;
+ ConstructorFieldInitializer toNode =
+ this._toNode as ConstructorFieldInitializer;
return _and(
_isEqualTokens(node.keyword, toNode.keyword),
_isEqualTokens(node.period, toNode.period),
@@ -8535,7 +10852,7 @@ class ResolutionCopier implements AstVisitor<bool> {
DoubleLiteral toNode = this._toNode as DoubleLiteral;
if (_and(
_isEqualTokens(node.literal, toNode.literal),
- node.value == toNode.value)) {
+ node.value == toNode.value)) {
toNode.propagatedType = node.propagatedType;
toNode.staticType = node.staticType;
return true;
@@ -8669,7 +10986,8 @@ class ResolutionCopier implements AstVisitor<bool> {
@override
bool visitForStatement(ForStatement node) {
ForStatement toNode = this._toNode as ForStatement;
- return _and(_isEqualTokens(node.forKeyword, toNode.forKeyword),
+ return _and(
+ _isEqualTokens(node.forKeyword, toNode.forKeyword),
_isEqualTokens(node.leftParenthesis, toNode.leftParenthesis),
_isEqualNodes(node.variables, toNode.variables),
_isEqualNodes(node.initialization, toNode.initialization),
@@ -8696,7 +11014,8 @@ class ResolutionCopier implements AstVisitor<bool> {
@override
bool visitFunctionDeclarationStatement(FunctionDeclarationStatement node) {
- FunctionDeclarationStatement toNode = this._toNode as FunctionDeclarationStatement;
+ FunctionDeclarationStatement toNode =
+ this._toNode as FunctionDeclarationStatement;
return _isEqualNodes(node.functionDeclaration, toNode.functionDeclaration);
}
@@ -8716,7 +11035,8 @@ class ResolutionCopier implements AstVisitor<bool> {
@override
bool visitFunctionExpressionInvocation(FunctionExpressionInvocation node) {
- FunctionExpressionInvocation toNode = this._toNode as FunctionExpressionInvocation;
+ FunctionExpressionInvocation toNode =
+ this._toNode as FunctionExpressionInvocation;
if (_and(
_isEqualNodes(node.function, toNode.function),
_isEqualNodes(node.argumentList, toNode.argumentList))) {
@@ -8745,7 +11065,8 @@ class ResolutionCopier implements AstVisitor<bool> {
@override
bool visitFunctionTypedFormalParameter(FunctionTypedFormalParameter node) {
- FunctionTypedFormalParameter toNode = this._toNode as FunctionTypedFormalParameter;
+ FunctionTypedFormalParameter toNode =
+ this._toNode as FunctionTypedFormalParameter;
return _and(
_isEqualNodes(node.documentationComment, toNode.documentationComment),
_isEqualNodeLists(node.metadata, toNode.metadata),
@@ -8821,7 +11142,8 @@ class ResolutionCopier implements AstVisitor<bool> {
@override
bool visitInstanceCreationExpression(InstanceCreationExpression node) {
- InstanceCreationExpression toNode = this._toNode as InstanceCreationExpression;
+ InstanceCreationExpression toNode =
+ this._toNode as InstanceCreationExpression;
if (_and(
_isEqualTokens(node.keyword, toNode.keyword),
_isEqualNodes(node.constructorName, toNode.constructorName),
@@ -8861,7 +11183,7 @@ class ResolutionCopier implements AstVisitor<bool> {
InterpolationString toNode = this._toNode as InterpolationString;
return _and(
_isEqualTokens(node.contents, toNode.contents),
- node.value == toNode.value);
+ node.value == toNode.value);
}
@override
@@ -9134,8 +11456,10 @@ class ResolutionCopier implements AstVisitor<bool> {
}
@override
- bool visitRedirectingConstructorInvocation(RedirectingConstructorInvocation node) {
- RedirectingConstructorInvocation toNode = this._toNode as RedirectingConstructorInvocation;
+ bool
+ visitRedirectingConstructorInvocation(RedirectingConstructorInvocation node) {
+ RedirectingConstructorInvocation toNode =
+ this._toNode as RedirectingConstructorInvocation;
if (_and(
_isEqualTokens(node.keyword, toNode.keyword),
_isEqualTokens(node.period, toNode.period),
@@ -9232,7 +11556,8 @@ class ResolutionCopier implements AstVisitor<bool> {
@override
bool visitSuperConstructorInvocation(SuperConstructorInvocation node) {
- SuperConstructorInvocation toNode = this._toNode as SuperConstructorInvocation;
+ SuperConstructorInvocation toNode =
+ this._toNode as SuperConstructorInvocation;
if (_and(
_isEqualTokens(node.keyword, toNode.keyword),
_isEqualTokens(node.period, toNode.period),
@@ -9328,7 +11653,8 @@ class ResolutionCopier implements AstVisitor<bool> {
@override
bool visitTopLevelVariableDeclaration(TopLevelVariableDeclaration node) {
- TopLevelVariableDeclaration toNode = this._toNode as TopLevelVariableDeclaration;
+ TopLevelVariableDeclaration toNode =
+ this._toNode as TopLevelVariableDeclaration;
return _and(
_isEqualNodes(node.documentationComment, toNode.documentationComment),
_isEqualNodeLists(node.metadata, toNode.metadata),
@@ -9412,7 +11738,8 @@ class ResolutionCopier implements AstVisitor<bool> {
@override
bool visitVariableDeclarationStatement(VariableDeclarationStatement node) {
- VariableDeclarationStatement toNode = this._toNode as VariableDeclarationStatement;
+ VariableDeclarationStatement toNode =
+ this._toNode as VariableDeclarationStatement;
return _and(
_isEqualNodes(node.variables, toNode.variables),
_isEqualTokens(node.semicolon, toNode.semicolon));
@@ -9450,10 +11777,21 @@ class ResolutionCopier implements AstVisitor<bool> {
* Return `true` if all of the parameters are `true`.
*/
bool _and(bool b1, bool b2, [bool b3 = true, bool b4 = true, bool b5 = true,
- bool b6 = true, bool b7 = true, bool b8 = true, bool b9 = true,
- bool b10 = true, bool b11 = true, bool b12 = true, bool b13 = true]) {
- return b1 && b2 && b3 && b4 && b5 && b6 && b7 && b8 && b9 && b10 && b11
- && b12 && b13;
+ bool b6 = true, bool b7 = true, bool b8 = true, bool b9 = true, bool b10 = true,
+ bool b11 = true, bool b12 = true, bool b13 = true]) {
+ return b1 &&
+ b2 &&
+ b3 &&
+ b4 &&
+ b5 &&
+ b6 &&
+ b7 &&
+ b8 &&
+ b9 &&
+ b10 &&
+ b11 &&
+ b12 &&
+ b13;
}
/**
@@ -9558,231 +11896,15 @@ class ResolutionCopier implements AstVisitor<bool> {
}
return first.lexeme == second.lexeme;
}
-}
-Map<String, MethodTrampoline> methodTable_Parser = <String, MethodTrampoline> {
- 'parseCompilationUnit_1': new MethodTrampoline(1, (Parser target, arg0) => target.parseCompilationUnit(arg0)),
- 'parseDirectives_1': new MethodTrampoline(1, (Parser target, arg0) => target.parseDirectives(arg0)),
- 'parseExpression_1': new MethodTrampoline(1, (Parser target, arg0) => target.parseExpression(arg0)),
- 'parseStatement_1': new MethodTrampoline(1, (Parser target, arg0) => target.parseStatement(arg0)),
- 'parseStatements_1': new MethodTrampoline(1, (Parser target, arg0) => target.parseStatements(arg0)),
- 'parseAnnotation_0': new MethodTrampoline(0, (Parser target) => target.parseAnnotation()),
- 'parseArgument_0': new MethodTrampoline(0, (Parser target) => target.parseArgument()),
- 'parseArgumentList_0': new MethodTrampoline(0, (Parser target) => target.parseArgumentList()),
- 'parseBitwiseOrExpression_0': new MethodTrampoline(0, (Parser target) => target.parseBitwiseOrExpression()),
- 'parseBlock_0': new MethodTrampoline(0, (Parser target) => target.parseBlock()),
- 'parseClassMember_1': new MethodTrampoline(1, (Parser target, arg0) => target.parseClassMember(arg0)),
- 'parseCompilationUnit_0': new MethodTrampoline(0, (Parser target) => target.parseCompilationUnit2()),
- 'parseConditionalExpression_0': new MethodTrampoline(0, (Parser target) => target.parseConditionalExpression()),
- 'parseConstructorName_0': new MethodTrampoline(0, (Parser target) => target.parseConstructorName()),
- 'parseExpression_0': new MethodTrampoline(0, (Parser target) => target.parseExpression2()),
- 'parseExpressionWithoutCascade_0': new MethodTrampoline(0, (Parser target) => target.parseExpressionWithoutCascade()),
- 'parseExtendsClause_0': new MethodTrampoline(0, (Parser target) => target.parseExtendsClause()),
- 'parseFormalParameterList_0': new MethodTrampoline(0, (Parser target) => target.parseFormalParameterList()),
- 'parseFunctionExpression_0': new MethodTrampoline(0, (Parser target) => target.parseFunctionExpression()),
- 'parseImplementsClause_0': new MethodTrampoline(0, (Parser target) => target.parseImplementsClause()),
- 'parseLabel_0': new MethodTrampoline(0, (Parser target) => target.parseLabel()),
- 'parseLibraryIdentifier_0': new MethodTrampoline(0, (Parser target) => target.parseLibraryIdentifier()),
- 'parseLogicalOrExpression_0': new MethodTrampoline(0, (Parser target) => target.parseLogicalOrExpression()),
- 'parseMapLiteralEntry_0': new MethodTrampoline(0, (Parser target) => target.parseMapLiteralEntry()),
- 'parseNormalFormalParameter_0': new MethodTrampoline(0, (Parser target) => target.parseNormalFormalParameter()),
- 'parsePrefixedIdentifier_0': new MethodTrampoline(0, (Parser target) => target.parsePrefixedIdentifier()),
- 'parseReturnType_0': new MethodTrampoline(0, (Parser target) => target.parseReturnType()),
- 'parseSimpleIdentifier_0': new MethodTrampoline(0, (Parser target) => target.parseSimpleIdentifier()),
- 'parseStatement_0': new MethodTrampoline(0, (Parser target) => target.parseStatement2()),
- 'parseStringLiteral_0': new MethodTrampoline(0, (Parser target) => target.parseStringLiteral()),
- 'parseTypeArgumentList_0': new MethodTrampoline(0, (Parser target) => target.parseTypeArgumentList()),
- 'parseTypeName_0': new MethodTrampoline(0, (Parser target) => target.parseTypeName()),
- 'parseTypeParameter_0': new MethodTrampoline(0, (Parser target) => target.parseTypeParameter()),
- 'parseTypeParameterList_0': new MethodTrampoline(0, (Parser target) => target.parseTypeParameterList()),
- 'parseWithClause_0': new MethodTrampoline(0, (Parser target) => target.parseWithClause()),
- 'advance_0': new MethodTrampoline(0, (Parser target) => target._advance()),
- 'appendScalarValue_5': new MethodTrampoline(5, (Parser target, arg0, arg1, arg2, arg3, arg4) => target._appendScalarValue(arg0, arg1, arg2, arg3, arg4)),
- 'computeStringValue_3': new MethodTrampoline(3, (Parser target, arg0, arg1, arg2) => target._computeStringValue(arg0, arg1, arg2)),
- 'convertToFunctionDeclaration_1': new MethodTrampoline(1, (Parser target, arg0) => target._convertToFunctionDeclaration(arg0)),
- 'couldBeStartOfCompilationUnitMember_0': new MethodTrampoline(0, (Parser target) => target._couldBeStartOfCompilationUnitMember()),
- 'createSyntheticIdentifier_0': new MethodTrampoline(0, (Parser target) => target._createSyntheticIdentifier()),
- 'createSyntheticKeyword_1': new MethodTrampoline(1, (Parser target, arg0) => target._createSyntheticKeyword(arg0)),
- 'createSyntheticStringLiteral_0': new MethodTrampoline(0, (Parser target) => target._createSyntheticStringLiteral()),
- 'createSyntheticToken_1': new MethodTrampoline(1, (Parser target, arg0) => target._createSyntheticToken(arg0)),
- 'ensureAssignable_1': new MethodTrampoline(1, (Parser target, arg0) => target._ensureAssignable(arg0)),
- 'expect_1': new MethodTrampoline(1, (Parser target, arg0) => target._expect(arg0)),
- 'expectGt_0': new MethodTrampoline(0, (Parser target) => target._expectGt()),
- 'expectKeyword_1': new MethodTrampoline(1, (Parser target, arg0) => target._expectKeyword(arg0)),
- 'expectSemicolon_0': new MethodTrampoline(0, (Parser target) => target._expectSemicolon()),
- 'findRange_2': new MethodTrampoline(2, (Parser target, arg0, arg1) => target._findRange(arg0, arg1)),
- 'getCodeBlockRanges_1': new MethodTrampoline(1, (Parser target, arg0) => target._getCodeBlockRanges(arg0)),
- 'getEndToken_1': new MethodTrampoline(1, (Parser target, arg0) => target._getEndToken(arg0)),
- 'injectToken_1': new MethodTrampoline(1, (Parser target, arg0) => target._injectToken(arg0)),
- 'isFunctionDeclaration_0': new MethodTrampoline(0, (Parser target) => target._isFunctionDeclaration()),
- 'isFunctionExpression_1': new MethodTrampoline(1, (Parser target, arg0) => target._isFunctionExpression(arg0)),
- 'isHexDigit_1': new MethodTrampoline(1, (Parser target, arg0) => target._isHexDigit(arg0)),
- 'isInitializedVariableDeclaration_0': new MethodTrampoline(0, (Parser target) => target._isInitializedVariableDeclaration()),
- 'isLinkText_2': new MethodTrampoline(2, (Parser target, arg0, arg1) => target._isLinkText(arg0, arg1)),
- 'isOperator_1': new MethodTrampoline(1, (Parser target, arg0) => target._isOperator(arg0)),
- 'isSwitchMember_0': new MethodTrampoline(0, (Parser target) => target._isSwitchMember()),
- 'isTypedIdentifier_1': new MethodTrampoline(1, (Parser target, arg0) => target._isTypedIdentifier(arg0)),
- 'lockErrorListener_0': new MethodTrampoline(0, (Parser target) => target._lockErrorListener()),
- 'matches_1': new MethodTrampoline(1, (Parser target, arg0) => target._matches(arg0)),
- 'matchesGt_0': new MethodTrampoline(0, (Parser target) => target._matchesGt()),
- 'matchesIdentifier_0': new MethodTrampoline(0, (Parser target) => target._matchesIdentifier()),
- 'matchesKeyword_1': new MethodTrampoline(1, (Parser target, arg0) => target._matchesKeyword(arg0)),
- 'matchesString_1': new MethodTrampoline(1, (Parser target, arg0) => target._matchesString(arg0)),
- 'optional_1': new MethodTrampoline(1, (Parser target, arg0) => target._optional(arg0)),
- 'parseAdditiveExpression_0': new MethodTrampoline(0, (Parser target) => target._parseAdditiveExpression()),
- 'parseAssertStatement_0': new MethodTrampoline(0, (Parser target) => target._parseAssertStatement()),
- 'parseAssignableExpression_1': new MethodTrampoline(1, (Parser target, arg0) => target._parseAssignableExpression(arg0)),
- 'parseAssignableSelector_2': new MethodTrampoline(2, (Parser target, arg0, arg1) => target._parseAssignableSelector(arg0, arg1)),
- 'parseAwaitExpression_0': new MethodTrampoline(0, (Parser target) => target._parseAwaitExpression()),
- 'parseBitwiseAndExpression_0': new MethodTrampoline(0, (Parser target) => target._parseBitwiseAndExpression()),
- 'parseBitwiseXorExpression_0': new MethodTrampoline(0, (Parser target) => target._parseBitwiseXorExpression()),
- 'parseBreakStatement_0': new MethodTrampoline(0, (Parser target) => target._parseBreakStatement()),
- 'parseCascadeSection_0': new MethodTrampoline(0, (Parser target) => target._parseCascadeSection()),
- 'parseClassDeclaration_2': new MethodTrampoline(2, (Parser target, arg0, arg1) => target._parseClassDeclaration(arg0, arg1)),
- 'parseClassMembers_2': new MethodTrampoline(2, (Parser target, arg0, arg1) => target._parseClassMembers(arg0, arg1)),
- 'parseClassTypeAlias_3': new MethodTrampoline(3, (Parser target, arg0, arg1, arg2) => target._parseClassTypeAlias(arg0, arg1, arg2)),
- 'parseCombinators_0': new MethodTrampoline(0, (Parser target) => target._parseCombinators()),
- 'parseCommentAndMetadata_0': new MethodTrampoline(0, (Parser target) => target._parseCommentAndMetadata()),
- 'parseCommentReference_2': new MethodTrampoline(2, (Parser target, arg0, arg1) => target._parseCommentReference(arg0, arg1)),
- 'parseCommentReferences_1': new MethodTrampoline(1, (Parser target, arg0) => target._parseCommentReferences(arg0)),
- 'parseCompilationUnitMember_1': new MethodTrampoline(1, (Parser target, arg0) => target._parseCompilationUnitMember(arg0)),
- 'parseConstExpression_0': new MethodTrampoline(0, (Parser target) => target._parseConstExpression()),
- 'parseConstructor_8': new MethodTrampoline(8, (Parser target, arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7) => target._parseConstructor(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7)),
- 'parseConstructorFieldInitializer_0': new MethodTrampoline(0, (Parser target) => target._parseConstructorFieldInitializer()),
- 'parseContinueStatement_0': new MethodTrampoline(0, (Parser target) => target._parseContinueStatement()),
- 'parseDirective_1': new MethodTrampoline(1, (Parser target, arg0) => target._parseDirective(arg0)),
- 'parseDirectives_0': new MethodTrampoline(0, (Parser target) => target._parseDirectives()),
- 'parseDocumentationComment_0': new MethodTrampoline(0, (Parser target) => target._parseDocumentationComment()),
- 'parseDoStatement_0': new MethodTrampoline(0, (Parser target) => target._parseDoStatement()),
- 'parseEmptyStatement_0': new MethodTrampoline(0, (Parser target) => target._parseEmptyStatement()),
- 'parseEnumConstantDeclaration_0': new MethodTrampoline(0, (Parser target) => target._parseEnumConstantDeclaration()),
- 'parseEnumDeclaration_1': new MethodTrampoline(1, (Parser target, arg0) => target._parseEnumDeclaration(arg0)),
- 'parseEqualityExpression_0': new MethodTrampoline(0, (Parser target) => target._parseEqualityExpression()),
- 'parseExportDirective_1': new MethodTrampoline(1, (Parser target, arg0) => target._parseExportDirective(arg0)),
- 'parseExpressionList_0': new MethodTrampoline(0, (Parser target) => target._parseExpressionList()),
- 'parseFinalConstVarOrType_1': new MethodTrampoline(1, (Parser target, arg0) => target._parseFinalConstVarOrType(arg0)),
- 'parseFormalParameter_1': new MethodTrampoline(1, (Parser target, arg0) => target._parseFormalParameter(arg0)),
- 'parseForStatement_0': new MethodTrampoline(0, (Parser target) => target._parseForStatement()),
- 'parseFunctionBody_3': new MethodTrampoline(3, (Parser target, arg0, arg1, arg2) => target._parseFunctionBody(arg0, arg1, arg2)),
- 'parseFunctionDeclaration_3': new MethodTrampoline(3, (Parser target, arg0, arg1, arg2) => target._parseFunctionDeclaration(arg0, arg1, arg2)),
- 'parseFunctionDeclarationStatement_0': new MethodTrampoline(0, (Parser target) => target._parseFunctionDeclarationStatement()),
- 'parseFunctionDeclarationStatementAfterReturnType_2': new MethodTrampoline(2, (Parser target, arg0, arg1) => target._parseFunctionDeclarationStatementAfterReturnType(arg0, arg1)),
- 'parseFunctionTypeAlias_2': new MethodTrampoline(2, (Parser target, arg0, arg1) => target._parseFunctionTypeAlias(arg0, arg1)),
- 'parseGetter_4': new MethodTrampoline(4, (Parser target, arg0, arg1, arg2, arg3) => target._parseGetter(arg0, arg1, arg2, arg3)),
- 'parseIdentifierList_0': new MethodTrampoline(0, (Parser target) => target._parseIdentifierList()),
- 'parseIfStatement_0': new MethodTrampoline(0, (Parser target) => target._parseIfStatement()),
- 'parseImportDirective_1': new MethodTrampoline(1, (Parser target, arg0) => target._parseImportDirective(arg0)),
- 'parseInitializedIdentifierList_4': new MethodTrampoline(4, (Parser target, arg0, arg1, arg2, arg3) => target._parseInitializedIdentifierList(arg0, arg1, arg2, arg3)),
- 'parseInstanceCreationExpression_1': new MethodTrampoline(1, (Parser target, arg0) => target._parseInstanceCreationExpression(arg0)),
- 'parseLibraryDirective_1': new MethodTrampoline(1, (Parser target, arg0) => target._parseLibraryDirective(arg0)),
- 'parseLibraryName_2': new MethodTrampoline(2, (Parser target, arg0, arg1) => target._parseLibraryName(arg0, arg1)),
- 'parseListLiteral_2': new MethodTrampoline(2, (Parser target, arg0, arg1) => target._parseListLiteral(arg0, arg1)),
- 'parseListOrMapLiteral_1': new MethodTrampoline(1, (Parser target, arg0) => target._parseListOrMapLiteral(arg0)),
- 'parseLogicalAndExpression_0': new MethodTrampoline(0, (Parser target) => target._parseLogicalAndExpression()),
- 'parseMapLiteral_2': new MethodTrampoline(2, (Parser target, arg0, arg1) => target._parseMapLiteral(arg0, arg1)),
- 'parseMethodDeclarationAfterParameters_6': new MethodTrampoline(6, (Parser target, arg0, arg1, arg2, arg3, arg4, arg5) => target._parseMethodDeclarationAfterParameters(arg0, arg1, arg2, arg3, arg4, arg5)),
- 'parseMethodDeclarationAfterReturnType_4': new MethodTrampoline(4, (Parser target, arg0, arg1, arg2, arg3) => target._parseMethodDeclarationAfterReturnType(arg0, arg1, arg2, arg3)),
- 'parseModifiers_0': new MethodTrampoline(0, (Parser target) => target._parseModifiers()),
- 'parseMultiplicativeExpression_0': new MethodTrampoline(0, (Parser target) => target._parseMultiplicativeExpression()),
- 'parseNativeClause_0': new MethodTrampoline(0, (Parser target) => target._parseNativeClause()),
- 'parseNewExpression_0': new MethodTrampoline(0, (Parser target) => target._parseNewExpression()),
- 'parseNonLabeledStatement_0': new MethodTrampoline(0, (Parser target) => target._parseNonLabeledStatement()),
- 'parseOperator_3': new MethodTrampoline(3, (Parser target, arg0, arg1, arg2) => target._parseOperator(arg0, arg1, arg2)),
- 'parseOptionalReturnType_0': new MethodTrampoline(0, (Parser target) => target._parseOptionalReturnType()),
- 'parsePartDirective_1': new MethodTrampoline(1, (Parser target, arg0) => target._parsePartDirective(arg0)),
- 'parsePostfixExpression_0': new MethodTrampoline(0, (Parser target) => target._parsePostfixExpression()),
- 'parsePrimaryExpression_0': new MethodTrampoline(0, (Parser target) => target._parsePrimaryExpression()),
- 'parseRedirectingConstructorInvocation_0': new MethodTrampoline(0, (Parser target) => target._parseRedirectingConstructorInvocation()),
- 'parseRelationalExpression_0': new MethodTrampoline(0, (Parser target) => target._parseRelationalExpression()),
- 'parseRethrowExpression_0': new MethodTrampoline(0, (Parser target) => target._parseRethrowExpression()),
- 'parseReturnStatement_0': new MethodTrampoline(0, (Parser target) => target._parseReturnStatement()),
- 'parseSetter_4': new MethodTrampoline(4, (Parser target, arg0, arg1, arg2, arg3) => target._parseSetter(arg0, arg1, arg2, arg3)),
- 'parseShiftExpression_0': new MethodTrampoline(0, (Parser target) => target._parseShiftExpression()),
- 'parseStatementList_0': new MethodTrampoline(0, (Parser target) => target._parseStatementList()),
- 'parseStringInterpolation_1': new MethodTrampoline(1, (Parser target, arg0) => target._parseStringInterpolation(arg0)),
- 'parseSuperConstructorInvocation_0': new MethodTrampoline(0, (Parser target) => target._parseSuperConstructorInvocation()),
- 'parseSwitchStatement_0': new MethodTrampoline(0, (Parser target) => target._parseSwitchStatement()),
- 'parseSymbolLiteral_0': new MethodTrampoline(0, (Parser target) => target._parseSymbolLiteral()),
- 'parseThrowExpression_0': new MethodTrampoline(0, (Parser target) => target._parseThrowExpression()),
- 'parseThrowExpressionWithoutCascade_0': new MethodTrampoline(0, (Parser target) => target._parseThrowExpressionWithoutCascade()),
- 'parseTryStatement_0': new MethodTrampoline(0, (Parser target) => target._parseTryStatement()),
- 'parseTypeAlias_1': new MethodTrampoline(1, (Parser target, arg0) => target._parseTypeAlias(arg0)),
- 'parseUnaryExpression_0': new MethodTrampoline(0, (Parser target) => target._parseUnaryExpression()),
- 'parseVariableDeclaration_0': new MethodTrampoline(0, (Parser target) => target._parseVariableDeclaration()),
- 'parseVariableDeclarationListAfterMetadata_1': new MethodTrampoline(1, (Parser target, arg0) => target._parseVariableDeclarationListAfterMetadata(arg0)),
- 'parseVariableDeclarationListAfterType_3': new MethodTrampoline(3, (Parser target, arg0, arg1, arg2) => target._parseVariableDeclarationListAfterType(arg0, arg1, arg2)),
- 'parseVariableDeclarationStatementAfterMetadata_1': new MethodTrampoline(1, (Parser target, arg0) => target._parseVariableDeclarationStatementAfterMetadata(arg0)),
- 'parseVariableDeclarationStatementAfterType_3': new MethodTrampoline(3, (Parser target, arg0, arg1, arg2) => target._parseVariableDeclarationStatementAfterType(arg0, arg1, arg2)),
- 'parseWhileStatement_0': new MethodTrampoline(0, (Parser target) => target._parseWhileStatement()),
- 'parseYieldStatement_0': new MethodTrampoline(0, (Parser target) => target._parseYieldStatement()),
- 'peek_0': new MethodTrampoline(0, (Parser target) => target._peek()),
- 'peekAt_1': new MethodTrampoline(1, (Parser target, arg0) => target._peekAt(arg0)),
- 'reportError_1': new MethodTrampoline(1, (Parser target, arg0) => target._reportError(arg0)),
- 'reportErrorForCurrentToken_2': new MethodTrampoline(2, (Parser target, arg0, arg1) => target._reportErrorForCurrentToken(arg0, arg1)),
- 'reportErrorForNode_3': new MethodTrampoline(3, (Parser target, arg0, arg1, arg2) => target._reportErrorForNode(arg0, arg1, arg2)),
- 'reportErrorForToken_3': new MethodTrampoline(3, (Parser target, arg0, arg1, arg2) => target._reportErrorForToken(arg0, arg1, arg2)),
- 'skipBlock_0': new MethodTrampoline(0, (Parser target) => target._skipBlock()),
- 'skipFinalConstVarOrType_1': new MethodTrampoline(1, (Parser target, arg0) => target._skipFinalConstVarOrType(arg0)),
- 'skipFormalParameterList_1': new MethodTrampoline(1, (Parser target, arg0) => target._skipFormalParameterList(arg0)),
- 'skipPastMatchingToken_1': new MethodTrampoline(1, (Parser target, arg0) => target._skipPastMatchingToken(arg0)),
- 'skipPrefixedIdentifier_1': new MethodTrampoline(1, (Parser target, arg0) => target._skipPrefixedIdentifier(arg0)),
- 'skipReturnType_1': new MethodTrampoline(1, (Parser target, arg0) => target._skipReturnType(arg0)),
- 'skipSimpleIdentifier_1': new MethodTrampoline(1, (Parser target, arg0) => target._skipSimpleIdentifier(arg0)),
- 'skipStringInterpolation_1': new MethodTrampoline(1, (Parser target, arg0) => target._skipStringInterpolation(arg0)),
- 'skipStringLiteral_1': new MethodTrampoline(1, (Parser target, arg0) => target._skipStringLiteral(arg0)),
- 'skipTypeArgumentList_1': new MethodTrampoline(1, (Parser target, arg0) => target._skipTypeArgumentList(arg0)),
- 'skipTypeName_1': new MethodTrampoline(1, (Parser target, arg0) => target._skipTypeName(arg0)),
- 'skipTypeParameterList_1': new MethodTrampoline(1, (Parser target, arg0) => target._skipTypeParameterList(arg0)),
- 'tokenMatches_2': new MethodTrampoline(2, (Parser target, arg0, arg1) => target._tokenMatches(arg0, arg1)),
- 'tokenMatchesIdentifier_1': new MethodTrampoline(1, (Parser target, arg0) => target._tokenMatchesIdentifier(arg0)),
- 'tokenMatchesKeyword_2': new MethodTrampoline(2, (Parser target, arg0, arg1) => target._tokenMatchesKeyword(arg0, arg1)),
- 'tokenMatchesString_2': new MethodTrampoline(2, (Parser target, arg0, arg1) => target._tokenMatchesString(arg0, arg1)),
- 'translateCharacter_3': new MethodTrampoline(3, (Parser target, arg0, arg1, arg2) => target._translateCharacter(arg0, arg1, arg2)),
- 'unlockErrorListener_0': new MethodTrampoline(0, (Parser target) => target._unlockErrorListener()),
- 'validateFormalParameterList_1': new MethodTrampoline(1, (Parser target, arg0) => target._validateFormalParameterList(arg0)),
- 'validateModifiersForClass_1': new MethodTrampoline(1, (Parser target, arg0) => target._validateModifiersForClass(arg0)),
- 'validateModifiersForConstructor_1': new MethodTrampoline(1, (Parser target, arg0) => target._validateModifiersForConstructor(arg0)),
- 'validateModifiersForEnum_1': new MethodTrampoline(1, (Parser target, arg0) => target._validateModifiersForEnum(arg0)),
- 'validateModifiersForField_1': new MethodTrampoline(1, (Parser target, arg0) => target._validateModifiersForField(arg0)),
- 'validateModifiersForFunctionDeclarationStatement_1': new MethodTrampoline(1, (Parser target, arg0) => target._validateModifiersForFunctionDeclarationStatement(arg0)),
- 'validateModifiersForGetterOrSetterOrMethod_1': new MethodTrampoline(1, (Parser target, arg0) => target._validateModifiersForGetterOrSetterOrMethod(arg0)),
- 'validateModifiersForOperator_1': new MethodTrampoline(1, (Parser target, arg0) => target._validateModifiersForOperator(arg0)),
- 'validateModifiersForTopLevelDeclaration_1': new MethodTrampoline(1, (Parser target, arg0) => target._validateModifiersForTopLevelDeclaration(arg0)),
- 'validateModifiersForTopLevelFunction_1': new MethodTrampoline(1, (Parser target, arg0) => target._validateModifiersForTopLevelFunction(arg0)),
- 'validateModifiersForTopLevelVariable_1': new MethodTrampoline(1, (Parser target, arg0) => target._validateModifiersForTopLevelVariable(arg0)),
- 'validateModifiersForTypedef_1': new MethodTrampoline(1, (Parser target, arg0) => target._validateModifiersForTypedef(arg0)),};
-
-
-Object invokeParserMethodImpl(Parser parser, String methodName, List<Object> objects, Token tokenStream) {
- parser.currentToken = tokenStream;
- MethodTrampoline method = methodTable_Parser['${methodName}_${objects.length}'];
- return method.invoke(parser, objects);
-}
-
-/**
- * Wrapper around [Function] which should be called with "target" and "arguments".
- */
-class MethodTrampoline {
- int parameterCount;
- Function trampoline;
- MethodTrampoline(this.parameterCount, this.trampoline);
- Object invoke(target, List arguments) {
- if (arguments.length != parameterCount) {
- throw new IllegalArgumentException("${arguments.length} != $parameterCount");
- }
- switch (parameterCount) {
- case 0:
- return trampoline(target);
- case 1:
- return trampoline(target, arguments[0]);
- case 2:
- return trampoline(target, arguments[0], arguments[1]);
- case 3:
- return trampoline(target, arguments[0], arguments[1], arguments[2]);
- case 4:
- return trampoline(target, arguments[0], arguments[1], arguments[2], arguments[3]);
- default:
- throw new IllegalArgumentException("Not implemented for > 4 arguments");
- }
+ /**
+ * Copy resolution data from one node to another.
+ *
+ * @param fromNode the node from which resolution information will be copied
+ * @param toNode the node to which resolution information will be copied
+ */
+ static void copyResolutionData(AstNode fromNode, AstNode toNode) {
+ ResolutionCopier copier = new ResolutionCopier();
+ copier._isEqualNodes(fromNode, toNode);
}
}
« no previous file with comments | « pkg/analyzer/lib/src/generated/java_io.dart ('k') | pkg/analyzer/lib/src/generated/resolver.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698