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

Unified Diff: pkg/dart_parser/lib/src/listener.dart

Issue 2631503002: Modify scanner and parser to be standalone packages. (Closed)
Patch Set: Created 3 years, 11 months 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
Index: pkg/dart_parser/lib/src/listener.dart
diff --git a/pkg/dart_parser/lib/src/listener.dart b/pkg/dart_parser/lib/src/listener.dart
index b33bd84d2b2d4b2c9019ad806fc37ac1c27ef8bb..c63aea1a415aa24b9c6766fd127e0658d189b7ff 100644
--- a/pkg/dart_parser/lib/src/listener.dart
+++ b/pkg/dart_parser/lib/src/listener.dart
@@ -2,402 +2,695 @@
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
-library dart2js.parser.listener;
-
-import '../common.dart';
-import '../diagnostics/messages.dart' show MessageTemplate;
-import '../tokens/precedence_constants.dart' as Precedence
- show EOF_INFO, IDENTIFIER_INFO;
-import '../tokens/token.dart'
- show
- BadInputToken,
- BeginGroupToken,
- ErrorToken,
- StringToken,
- Token,
- UnmatchedToken,
- UnterminatedToken;
-import '../tree/tree.dart';
-
-const bool VERBOSE = false;
+library parser.listener;
+
+import 'package:scanner/src/precedence.dart' show
+ EOF_INFO,
+ IDENTIFIER_INFO;
+
+import 'package:scanner/src/token.dart' show
+ BadInputToken,
+ BeginGroupToken,
+ ErrorToken,
+ StringToken,
+ Token,
+ UnmatchedToken,
+ UnterminatedToken;
+
+import 'error_kind.dart' show
+ ErrorKind;
/**
* A parser event listener that does nothing except throw exceptions
* on parser errors.
*/
class Listener {
+ final List<ParserError> recoverableErrors = <ParserError>[];
+
+ void logEvent(String name) {}
+
set suppressParseErrors(bool value) {}
void beginArguments(Token token) {}
- void endArguments(int count, Token beginToken, Token endToken) {}
+ void endArguments(int count, Token beginToken, Token endToken) {
+ logEvent("Arguments");
+ }
/// Handle async modifiers `async`, `async*`, `sync`.
- void handleAsyncModifier(Token asyncToken, Token startToken) {}
+ void handleAsyncModifier(Token asyncToken, Token starToken) {
+ logEvent("AsyncModifier");
+ }
void beginAwaitExpression(Token token) {}
- void endAwaitExpression(Token beginToken, Token endToken) {}
+ void endAwaitExpression(Token beginToken, Token endToken) {
+ logEvent("AwaitExpression");
+ }
void beginBlock(Token token) {}
- void endBlock(int count, Token beginToken, Token endToken) {}
+ void endBlock(int count, Token beginToken, Token endToken) {
+ logEvent("Block");
+ }
void beginCascade(Token token) {}
- void endCascade() {}
+ void endCascade() {
+ logEvent("Cascade");
+ }
void beginClassBody(Token token) {}
- void endClassBody(int memberCount, Token beginToken, Token endToken) {}
+ void endClassBody(int memberCount, Token beginToken, Token endToken) {
+ logEvent("ClassBody");
+ }
void beginClassDeclaration(Token token) {}
void endClassDeclaration(int interfacesCount, Token beginToken,
- Token extendsKeyword, Token implementsKeyword, Token endToken) {}
+ Token extendsKeyword, Token implementsKeyword, Token endToken) {
+ logEvent("ClassDeclaration");
+ }
void beginCombinators(Token token) {}
- void endCombinators(int count) {}
+ void endCombinators(int count) {
+ logEvent("Combinators");
+ }
void beginCompilationUnit(Token token) {}
- void endCompilationUnit(int count, Token token) {}
+ void endCompilationUnit(int count, Token token) {
+ logEvent("CompilationUnit");
+ }
void beginConstructorReference(Token start) {}
void endConstructorReference(
- Token start, Token periodBeforeName, Token endToken) {}
+ Token start, Token periodBeforeName, Token endToken) {
+ logEvent("ConstructorReference");
+ }
void beginDoWhileStatement(Token token) {}
void endDoWhileStatement(
- Token doKeyword, Token whileKeyword, Token endToken) {}
+ Token doKeyword, Token whileKeyword, Token endToken) {
+ logEvent("DoWhileStatement");
+ }
+
+ void beginDoWhileStatementBody(Token token) {
+ }
+
+ void endDoWhileStatementBody(Token token) {
+ logEvent("DoWhileStatementBody");
+ }
+
+ void beginWhileStatementBody(Token token) {
+ }
+
+ void endWhileStatementBody(Token token) {
+ logEvent("WhileStatementBody");
+ }
void beginEnum(Token enumKeyword) {}
- void endEnum(Token enumKeyword, Token endBrace, int count) {}
+ void endEnum(Token enumKeyword, Token endBrace, int count) {
+ logEvent("Enum");
+ }
void beginExport(Token token) {}
- void endExport(Token exportKeyword, Token semicolon) {}
+ void endExport(Token exportKeyword, Token semicolon) {
+ logEvent("Export");
+ }
+
+ void beginExpression(Token token) {}
void beginExpressionStatement(Token token) {}
- void endExpressionStatement(Token token) {}
+ void endExpressionStatement(Token token) {
+ logEvent("ExpressionStatement");
+ }
void beginFactoryMethod(Token token) {}
- void endFactoryMethod(Token beginToken, Token endToken) {}
+ void endFactoryMethod(Token beginToken, Token endToken) {
+ logEvent("FactoryMethod");
+ }
void beginFormalParameter(Token token) {}
- void endFormalParameter(Token thisKeyword) {}
+ void endFormalParameter(Token thisKeyword) {
+ logEvent("FormalParameter");
+ }
- void handleNoFormalParameters(Token token) {}
+ void handleNoFormalParameters(Token token) {
+ logEvent("NoFormalParameters");
+ }
void beginFormalParameters(Token token) {}
- void endFormalParameters(int count, Token beginToken, Token endToken) {}
+ void endFormalParameters(int count, Token beginToken, Token endToken) {
+ logEvent("FormalParameters");
+ }
- void endFields(int count, Token beginToken, Token endToken) {}
+ void endFields(int count, Token beginToken, Token endToken) {
+ logEvent("Fields");
+ }
void beginForStatement(Token token) {}
void endForStatement(
- int updateExpressionCount, Token beginToken, Token endToken) {}
+ int updateExpressionCount, Token beginToken, Token endToken) {
+ logEvent("ForStatement");
+ }
+
+ void beginForStatementBody(Token token) {
+ }
+
+ void endForStatementBody(Token token) {
+ logEvent("ForStatementBody");
+ }
void endForIn(
- Token awaitToken, Token forToken, Token inKeyword, Token endToken) {}
+ Token awaitToken, Token forToken, Token inKeyword, Token endToken) {
+ logEvent("ForIn");
+ }
+
+ void beginForInBody(Token token) {
+ }
+
+ void endForInBody(Token token) {
+ logEvent("ForInBody");
+ }
void beginFunction(Token token) {}
- void endFunction(Token getOrSet, Token endToken) {}
+ void endFunction(Token getOrSet, Token endToken) {
+ logEvent("Function");
+ }
void beginFunctionDeclaration(Token token) {}
- void endFunctionDeclaration(Token token) {}
+ void endFunctionDeclaration(Token token) {
+ logEvent("FunctionDeclaration");
+ }
void beginFunctionBody(Token token) {}
- void endFunctionBody(int count, Token beginToken, Token endToken) {}
+ void endFunctionBody(int count, Token beginToken, Token endToken) {
+ logEvent("FunctionBody");
+ }
- void handleNoFunctionBody(Token token) {}
+ void handleNoFunctionBody(Token token) {
+ logEvent("NoFunctionBody");
+ }
void skippedFunctionBody(Token token) {}
void beginFunctionName(Token token) {}
- void endFunctionName(Token token) {}
+ void endFunctionName(Token token) {
+ logEvent("FunctionName");
+ }
void beginFunctionTypeAlias(Token token) {}
- void endFunctionTypeAlias(Token typedefKeyword, Token endToken) {}
+ void endFunctionTypeAlias(Token typedefKeyword, Token endToken) {
+ logEvent("FunctionTypeAlias");
+ }
void beginMixinApplication(Token token) {}
- void endMixinApplication() {}
+ void endMixinApplication() {
+ logEvent("MixinApplication");
+ }
void beginNamedMixinApplication(Token token) {}
void endNamedMixinApplication(
- Token classKeyword, Token implementsKeyword, Token endToken) {}
+ Token classKeyword, Token implementsKeyword, Token endToken) {
+ logEvent("NamedMixinApplication");
+ }
void beginHide(Token hideKeyword) {}
- void endHide(Token hideKeyword) {}
+ void endHide(Token hideKeyword) {
+ logEvent("Hide");
+ }
void beginIdentifierList(Token token) {}
- void endIdentifierList(int count) {}
+ void endIdentifierList(int count) {
+ logEvent("IdentifierList");
+ }
void beginTypeList(Token token) {}
- void endTypeList(int count) {}
+ void endTypeList(int count) {
+ logEvent("TypeList");
+ }
void beginIfStatement(Token token) {}
- void endIfStatement(Token ifToken, Token elseToken) {}
+ void endIfStatement(Token ifToken, Token elseToken) {
+ logEvent("IfStatement");
+ }
+
+ void beginThenStatement(Token token) {
+ }
+
+ void endThenStatement(Token token) {
+ logEvent("ThenStatement");
+ }
+
+ void beginElseStatement(Token token) {
+ }
+
+ void endElseStatement(Token token) {
+ logEvent("ElseStatement");
+ }
void beginImport(Token importKeyword) {}
void endImport(Token importKeyword, Token DeferredKeyword, Token asKeyword,
- Token semicolon) {}
+ Token semicolon) {
+ logEvent("Import");
+ }
void beginConditionalUris(Token token) {}
- void endConditionalUris(int count) {}
+ void endConditionalUris(int count) {
+ logEvent("ConditionalUris");
+ }
void beginConditionalUri(Token ifKeyword) {}
- void endConditionalUri(Token ifKeyword, Token equalitySign) {}
+ void endConditionalUri(Token ifKeyword, Token equalitySign) {
+ logEvent("ConditionalUri");
+ }
void beginDottedName(Token token) {}
- void endDottedName(int count, Token firstIdentifier) {}
+ void endDottedName(int count, Token firstIdentifier) {
+ logEvent("DottedName");
+ }
void beginInitializedIdentifier(Token token) {}
- void endInitializedIdentifier() {}
+ void endInitializedIdentifier() {
+ logEvent("InitializedIdentifier");
+ }
+ // TODO(ahe): Rename this to beginVariableInitializer.
void beginInitializer(Token token) {}
- void endInitializer(Token assignmentOperator) {}
+ // TODO(ahe): Rename this to endVariableInitializer.
+ void endInitializer(Token assignmentOperator) {
+ logEvent("Initializer");
+ }
+
+ // TODO(ahe): Rename this to beginInitializer.
+ void beginConstructorInitializer(Token token) {}
+
+ // TODO(ahe): Rename this to endInitializer.
+ void endConstructorInitializer(Token token) {
+ logEvent("ConstructorInitializer");
+ }
void beginInitializers(Token token) {}
- void endInitializers(int count, Token beginToken, Token endToken) {}
+ void endInitializers(int count, Token beginToken, Token endToken) {
+ logEvent("Initializers");
+ }
- void handleNoInitializers() {}
+ void handleNoInitializers() {
+ logEvent("NoInitializers");
+ }
- void handleLabel(Token token) {}
+ void handleLabel(Token token) {
+ logEvent("Label");
+ }
void beginLabeledStatement(Token token, int labelCount) {}
- void endLabeledStatement(int labelCount) {}
+ void endLabeledStatement(int labelCount) {
+ logEvent("LabeledStatement");
+ }
void beginLibraryName(Token token) {}
- void endLibraryName(Token libraryKeyword, Token semicolon) {}
+ void endLibraryName(Token libraryKeyword, Token semicolon) {
+ logEvent("LibraryName");
+ }
void beginLiteralMapEntry(Token token) {}
- void endLiteralMapEntry(Token colon, Token endToken) {}
+ void endLiteralMapEntry(Token colon, Token endToken) {
+ logEvent("LiteralMapEntry");
+ }
void beginLiteralString(Token token) {}
- void endLiteralString(int interpolationCount) {}
+ void endLiteralString(int interpolationCount) {
+ logEvent("LiteralString");
+ }
- void handleStringJuxtaposition(int literalCount) {}
+ void handleStringJuxtaposition(int literalCount) {
+ logEvent("StringJuxtaposition");
+ }
void beginMember(Token token) {}
- void endMember() {}
+ void endMember() {
+ logEvent("Member");
+ }
- void endMethod(Token getOrSet, Token beginToken, Token endToken) {}
+ void endMethod(Token getOrSet, Token beginToken, Token endToken) {
+ logEvent("Method");
+ }
void beginMetadataStar(Token token) {}
- void endMetadataStar(int count, bool forParameter) {}
+ void endMetadataStar(int count, bool forParameter) {
+ logEvent("MetadataStar");
+ }
void beginMetadata(Token token) {}
- void endMetadata(Token beginToken, Token periodBeforeName, Token endToken) {}
+ void endMetadata(Token beginToken, Token periodBeforeName, Token endToken) {
+ logEvent("Metadata");
+ }
void beginOptionalFormalParameters(Token token) {}
void endOptionalFormalParameters(
- int count, Token beginToken, Token endToken) {}
+ int count, Token beginToken, Token endToken) {
+ logEvent("OptionalFormalParameters");
+ }
void beginPart(Token token) {}
- void endPart(Token partKeyword, Token semicolon) {}
+ void endPart(Token partKeyword, Token semicolon) {
+ logEvent("Part");
+ }
void beginPartOf(Token token) {}
- void endPartOf(Token partKeyword, Token semicolon) {}
+ void endPartOf(Token partKeyword, Token semicolon) {
+ logEvent("PartOf");
+ }
void beginRedirectingFactoryBody(Token token) {}
- void endRedirectingFactoryBody(Token beginToken, Token endToken) {}
+ void endRedirectingFactoryBody(Token beginToken, Token endToken) {
+ logEvent("RedirectingFactoryBody");
+ }
void beginReturnStatement(Token token) {}
void endReturnStatement(
- bool hasExpression, Token beginToken, Token endToken) {}
+ bool hasExpression, Token beginToken, Token endToken) {
+ logEvent("ReturnStatement");
+ }
void beginSend(Token token) {}
- void endSend(Token token) {}
+ void endSend(Token token) {
+ logEvent("Send");
+ }
void beginShow(Token showKeyword) {}
- void endShow(Token showKeyword) {}
+ void endShow(Token showKeyword) {
+ logEvent("Show");
+ }
void beginSwitchStatement(Token token) {}
- void endSwitchStatement(Token switchKeyword, Token endToken) {}
+ void endSwitchStatement(Token switchKeyword, Token endToken) {
+ logEvent("SwitchStatement");
+ }
void beginSwitchBlock(Token token) {}
- void endSwitchBlock(int caseCount, Token beginToken, Token endToken) {}
+ void endSwitchBlock(int caseCount, Token beginToken, Token endToken) {
+ logEvent("SwitchBlock");
+ }
void beginLiteralSymbol(Token token) {}
- void endLiteralSymbol(Token hashToken, int identifierCount) {}
+ void endLiteralSymbol(Token hashToken, int identifierCount) {
+ logEvent("LiteralSymbol");
+ }
void beginThrowExpression(Token token) {}
- void endThrowExpression(Token throwToken, Token endToken) {}
+ void endThrowExpression(Token throwToken, Token endToken) {
+ logEvent("ThrowExpression");
+ }
void beginRethrowStatement(Token token) {}
- void endRethrowStatement(Token throwToken, Token endToken) {}
+ void endRethrowStatement(Token throwToken, Token endToken) {
+ logEvent("RethrowStatement");
+ }
- void endTopLevelDeclaration(Token token) {}
+ void endTopLevelDeclaration(Token token) {
+ logEvent("TopLevelDeclaration");
+ }
void beginTopLevelMember(Token token) {}
- void endTopLevelFields(int count, Token beginToken, Token endToken) {}
+ void endTopLevelFields(int count, Token beginToken, Token endToken) {
+ logEvent("TopLevelFields");
+ }
- void endTopLevelMethod(Token beginToken, Token getOrSet, Token endToken) {}
+ void endTopLevelMethod(Token beginToken, Token getOrSet, Token endToken) {
+ logEvent("TopLevelMethod");
+ }
void beginTryStatement(Token token) {}
- void handleCaseMatch(Token caseKeyword, Token colon) {}
+ void handleCaseMatch(Token caseKeyword, Token colon) {
+ logEvent("CaseMatch");
+ }
- void handleCatchBlock(Token onKeyword, Token catchKeyword) {}
+ void beginCatchClause(Token token) {
+ }
- void handleFinallyBlock(Token finallyKeyword) {}
+ void endCatchClause(Token token) {
+ logEvent("CatchClause");
+ }
+
+ void handleCatchBlock(Token onKeyword, Token catchKeyword) {
+ logEvent("CatchBlock");
+ }
+
+ void handleFinallyBlock(Token finallyKeyword) {
+ logEvent("FinallyBlock");
+ }
void endTryStatement(
- int catchCount, Token tryKeyword, Token finallyKeyword) {}
+ int catchCount, Token tryKeyword, Token finallyKeyword) {
+ logEvent("TryStatement");
+ }
- void endType(Token beginToken, Token endToken) {}
+ void endType(Token beginToken, Token endToken) {
+ logEvent("Type");
+ }
void beginTypeArguments(Token token) {}
- void endTypeArguments(int count, Token beginToken, Token endToken) {}
+ void endTypeArguments(int count, Token beginToken, Token endToken) {
+ logEvent("TypeArguments");
+ }
- void handleNoTypeArguments(Token token) {}
+ void handleNoTypeArguments(Token token) {
+ logEvent("NoTypeArguments");
+ }
void beginTypeVariable(Token token) {}
- void endTypeVariable(Token token, Token extendsOrSuper) {}
+ void endTypeVariable(Token token, Token extendsOrSuper) {
+ logEvent("TypeVariable");
+ }
void beginTypeVariables(Token token) {}
- void endTypeVariables(int count, Token beginToken, Token endToken) {}
+ void endTypeVariables(int count, Token beginToken, Token endToken) {
+ logEvent("TypeVariables");
+ }
void beginUnnamedFunction(Token token) {}
- void endUnnamedFunction(Token token) {}
+ void endUnnamedFunction(Token token) {
+ logEvent("UnnamedFunction");
+ }
void beginVariablesDeclaration(Token token) {}
- void endVariablesDeclaration(int count, Token endToken) {}
+ void endVariablesDeclaration(int count, Token endToken) {
+ logEvent("VariablesDeclaration");
+ }
void beginWhileStatement(Token token) {}
- void endWhileStatement(Token whileKeyword, Token endToken) {}
+ void endWhileStatement(Token whileKeyword, Token endToken) {
+ logEvent("WhileStatement");
+ }
- void handleAsOperator(Token operator, Token endToken) {}
+ void handleAsOperator(Token operator, Token endToken) {
+ logEvent("AsOperator");
+ }
- void handleAssignmentExpression(Token token) {}
+ void handleAssignmentExpression(Token token) {
+ logEvent("AssignmentExpression");
+ }
- void handleBinaryExpression(Token token) {}
+ void handleBinaryExpression(Token token) {
+ logEvent("BinaryExpression");
+ }
- void handleConditionalExpression(Token question, Token colon) {}
+ void handleConditionalExpression(Token question, Token colon) {
+ logEvent("ConditionalExpression");
+ }
- void handleConstExpression(Token token) {}
+ void handleConstExpression(Token token) {
+ logEvent("ConstExpression");
+ }
- void handleFunctionTypedFormalParameter(Token token) {}
+ void beginFunctionTypedFormalParameter(Token token) {
+ }
- void handleIdentifier(Token token) {}
+ // TODO(ahe): Rename to `endFunctionTypedFormalParameter`.
+ void handleFunctionTypedFormalParameter(Token token) {
+ logEvent("FunctionTypedFormalParameter");
+ }
+
+ void handleIdentifier(Token token) {
+ logEvent("Identifier");
+ }
void handleIndexedExpression(
- Token openCurlyBracket, Token closeCurlyBracket) {}
+ Token openCurlyBracket, Token closeCurlyBracket) {
+ logEvent("IndexedExpression");
+ }
- void handleIsOperator(Token operator, Token not, Token endToken) {}
+ void handleIsOperator(Token operator, Token not, Token endToken) {
+ logEvent("IsOperator");
+ }
- void handleLiteralBool(Token token) {}
+ void handleLiteralBool(Token token) {
+ logEvent("LiteralBool");
+ }
void handleBreakStatement(
- bool hasTarget, Token breakKeyword, Token endToken) {}
+ bool hasTarget, Token breakKeyword, Token endToken) {
+ logEvent("BreakStatement");
+ }
void handleContinueStatement(
- bool hasTarget, Token continueKeyword, Token endToken) {}
+ bool hasTarget, Token continueKeyword, Token endToken) {
+ logEvent("ContinueStatement");
+ }
- void handleEmptyStatement(Token token) {}
+ void handleEmptyStatement(Token token) {
+ logEvent("EmptyStatement");
+ }
void handleAssertStatement(
- Token assertKeyword, Token commaToken, Token semicolonToken) {}
+ Token assertKeyword, Token commaToken, Token semicolonToken) {
+ logEvent("AssertStatement");
+ }
/** Called with either the token containing a double literal, or
* an immediately preceding "unary plus" token.
*/
- void handleLiteralDouble(Token token) {}
+ void handleLiteralDouble(Token token) {
+ logEvent("LiteralDouble");
+ }
/** Called with either the token containing an integer literal,
* or an immediately preceding "unary plus" token.
*/
- void handleLiteralInt(Token token) {}
+ void handleLiteralInt(Token token) {
+ logEvent("LiteralInt");
+ }
void handleLiteralList(
- int count, Token beginToken, Token constKeyword, Token endToken) {}
+ int count, Token beginToken, Token constKeyword, Token endToken) {
+ logEvent("LiteralList");
+ }
void handleLiteralMap(
- int count, Token beginToken, Token constKeyword, Token endToken) {}
+ int count, Token beginToken, Token constKeyword, Token endToken) {
+ logEvent("LiteralMap");
+ }
- void handleLiteralNull(Token token) {}
+ void handleLiteralNull(Token token) {
+ logEvent("LiteralNull");
+ }
- void handleModifier(Token token) {}
+ void handleModifier(Token token) {
+ logEvent("Modifier");
+ }
- void handleModifiers(int count) {}
+ void handleModifiers(int count) {
+ logEvent("Modifiers");
+ }
- void handleNamedArgument(Token colon) {}
+ void handleNamedArgument(Token colon) {
+ logEvent("NamedArgument");
+ }
- void handleNewExpression(Token token) {}
+ void handleNewExpression(Token token) {
+ logEvent("NewExpression");
+ }
- void handleNoArguments(Token token) {}
+ void handleNoArguments(Token token) {
+ logEvent("NoArguments");
+ }
- void handleNoExpression(Token token) {}
+ void handleNoExpression(Token token) {
+ logEvent("NoExpression");
+ }
- void handleNoType(Token token) {}
+ void handleNoType(Token token) {
+ logEvent("NoType");
+ }
+
+ void handleNoTypeVariables(Token token) {
+ logEvent("NoTypeVariables");
+ }
- void handleNoTypeVariables(Token token) {}
+ void handleOperator(Token token) {
+ logEvent("Operator");
+ }
- void handleOperator(Token token) {}
+ void handleOperatorName(Token operatorKeyword, Token token) {
+ logEvent("OperatorName");
+ }
- void handleOperatorName(Token operatorKeyword, Token token) {}
+ void handleParenthesizedExpression(BeginGroupToken token) {
+ logEvent("ParenthesizedExpression");
+ }
- void handleParenthesizedExpression(BeginGroupToken token) {}
+ void handleQualified(Token period) {
+ logEvent("Qualified");
+ }
- void handleQualified(Token period) {}
+ void handleStringPart(Token token) {
+ logEvent("StringPart");
+ }
- void handleStringPart(Token token) {}
+ void handleSuperExpression(Token token) {
+ logEvent("SuperExpression");
+ }
- void handleSuperExpression(Token token) {}
+ void beginSwitchCase(int labelCount, int expressionCount, Token firstToken) {
+ }
void handleSwitchCase(
int labelCount,
@@ -405,23 +698,39 @@ class Listener {
Token defaultKeyword,
int statementCount,
Token firstToken,
- Token endToken) {}
+ Token endToken) {
+ logEvent("SwitchCase");
+ }
- void handleThisExpression(Token token) {}
+ void handleThisExpression(Token token) {
+ logEvent("ThisExpression");
+ }
- void handleUnaryPostfixAssignmentExpression(Token token) {}
+ void handleUnaryPostfixAssignmentExpression(Token token) {
+ logEvent("UnaryPostfixAssignmentExpression");
+ }
- void handleUnaryPrefixExpression(Token token) {}
+ void handleUnaryPrefixExpression(Token token) {
+ logEvent("UnaryPrefixExpression");
+ }
- void handleUnaryPrefixAssignmentExpression(Token token) {}
+ void handleUnaryPrefixAssignmentExpression(Token token) {
+ logEvent("UnaryPrefixAssignmentExpression");
+ }
- void handleValuedFormalParameter(Token equals, Token token) {}
+ void handleValuedFormalParameter(Token equals, Token token) {
+ logEvent("ValuedFormalParameter");
+ }
- void handleVoidKeyword(Token token) {}
+ void handleVoidKeyword(Token token) {
+ logEvent("VoidKeyword");
+ }
void beginYieldStatement(Token token) {}
- void endYieldStatement(Token yieldToken, Token starToken, Token endToken) {}
+ void endYieldStatement(Token yieldToken, Token starToken, Token endToken) {
+ logEvent("YieldStatement");
+ }
Token expected(String string, Token token) {
if (token is ErrorToken) {
@@ -434,7 +743,7 @@ class Listener {
Token synthesizeIdentifier(Token token) {
Token synthesizedToken = new StringToken.fromString(
- Precedence.IDENTIFIER_INFO, '?', token.charOffset);
+ IDENTIFIER_INFO, '?', token.charOffset);
synthesizedToken.next = token.next;
return synthesizedToken;
}
@@ -530,42 +839,26 @@ class Listener {
}
skipToEof(Token token) {
- while (!identical(token.info, Precedence.EOF_INFO)) {
+ while (!identical(token.info, EOF_INFO)) {
token = token.next;
}
return token;
}
- void recoverableError(Token token, String message) {
- error(message, token);
- }
-
void error(String message, Token token) {
- throw new ParserError("$message @ ${token.charOffset}");
+ throw new ParserError(token, ErrorKind.UNSPECIFIED, {'text': message});
}
- void reportError(Spannable spannable, MessageKind messageKind,
- [Map arguments = const {}]) {
- if (spannable is ErrorToken) {
- reportErrorToken(spannable);
+ void reportError(Token token, ErrorKind kind, [Map arguments = const {}]) {
+ if (token is ErrorToken) {
+ reportErrorToken(token);
} else {
- reportErrorHelper(spannable, messageKind, arguments);
+ reportErrorHelper(token, kind, arguments);
}
}
- void reportErrorHelper(Spannable spannable, MessageKind messageKind,
- [Map arguments = const {}]) {
- MessageTemplate template = MessageTemplate.TEMPLATES[messageKind];
- String message = template.message(arguments, true).toString();
- Token token;
- if (spannable is Token) {
- token = spannable;
- } else if (spannable is Node) {
- token = spannable.getBeginToken();
- } else {
- throw new ParserError(message);
- }
- recoverableError(token, message);
+ void reportErrorHelper(Token token, ErrorKind kind, Map arguments) {
+ recoverableErrors.add(new ParserError(token, kind, arguments));
}
void reportErrorToken(ErrorToken token) {
@@ -576,13 +869,13 @@ class Listener {
hex = "$padding$hex";
}
reportErrorHelper(
- token, MessageKind.BAD_INPUT_CHARACTER, {'characterHex': hex});
+ token, ErrorKind.INVALID_INPUT_CHARACTER, {'characterHex': hex});
} else if (token is UnterminatedToken) {
- MessageKind kind;
+ ErrorKind kind;
var arguments = const {};
switch (token.start) {
case '1e':
- kind = MessageKind.EXPONENT_MISSING;
+ kind = ErrorKind.MISSING_EXPONENT;
break;
case '"':
case "'":
@@ -592,20 +885,20 @@ class Listener {
case "r'":
case 'r"""':
case "r'''":
- kind = MessageKind.UNTERMINATED_STRING;
+ kind = ErrorKind.UNTERMINATED_STRING;
arguments = {'quote': token.start};
break;
case '0x':
- kind = MessageKind.HEX_DIGIT_EXPECTED;
+ kind = ErrorKind.EXPECTED_HEX_DIGIT;
break;
case r'$':
- kind = MessageKind.MALFORMED_STRING_LITERAL;
+ kind = ErrorKind.MALFORMED_STRING_LITERAL;
break;
case '/*':
- kind = MessageKind.UNTERMINATED_COMMENT;
+ kind = ErrorKind.UNTERMINATED_COMMENT;
break;
default:
- kind = MessageKind.UNTERMINATED_TOKEN;
+ kind = ErrorKind.UNTERMINATED_TOKEN;
break;
}
reportErrorHelper(token, kind, arguments);
@@ -613,9 +906,9 @@ class Listener {
String begin = token.begin.value;
String end = closeBraceFor(begin);
reportErrorHelper(
- token, MessageKind.UNMATCHED_TOKEN, {'begin': begin, 'end': end});
+ token, ErrorKind.UNMATCHED_TOKEN, {'begin': begin, 'end': end});
} else {
- throw new SpannableAssertionFailure(token, token.assertionMessage);
+ error(token.assertionMessage, token);
}
}
}
@@ -631,7 +924,13 @@ String closeBraceFor(String openBrace) {
}
class ParserError {
- final String reason;
- ParserError(this.reason);
- toString() => reason;
+ final Token token;
+
+ final ErrorKind kind;
+
+ final Map arguments;
+
+ ParserError(this.token, this.kind, this.arguments);
+
+ String toString() => "@${token.charOffset}: $kind $arguments";
}

Powered by Google App Engine
This is Rietveld 408576698