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

Unified Diff: pkg/front_end/lib/src/fasta/analyzer/ast_builder.dart

Issue 2752093002: Allow AstBuilder to report parse errors. (Closed)
Patch Set: Created 3 years, 9 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/front_end/lib/src/fasta/analyzer/ast_builder.dart
diff --git a/pkg/front_end/lib/src/fasta/analyzer/ast_builder.dart b/pkg/front_end/lib/src/fasta/analyzer/ast_builder.dart
index 11ec061cd722eac598402d4ef56c87bb0e32bbf6..c48c14597fc562906a216a35047ad9af83c0f225 100644
--- a/pkg/front_end/lib/src/fasta/analyzer/ast_builder.dart
+++ b/pkg/front_end/lib/src/fasta/analyzer/ast_builder.dart
@@ -26,15 +26,16 @@ import 'element_store.dart'
AnalyzerParameterElement,
ElementStore,
KernelClassElement;
+import 'package:analyzer/src/dart/error/syntactic_errors.dart';
+import 'package:front_end/src/fasta/parser/error_kind.dart';
import 'token_utils.dart' show toAnalyzerToken, toAnalyzerCommentToken;
class AstBuilder extends ScopeListener {
final AstFactory ast = standard.astFactory;
+ final ErrorReporter errorReporter;
final KernelLibraryBuilder library;
-
final Builder member;
-
final ElementStore elementStore;
@override
@@ -44,7 +45,8 @@ class AstBuilder extends ScopeListener {
/// being parsed.
String className;
- AstBuilder(this.library, this.member, this.elementStore, Scope scope,
+ AstBuilder(this.errorReporter, this.library, this.member, this.elementStore,
+ Scope scope,
[Uri uri])
: uri = uri ?? library.fileUri,
super(scope);
@@ -952,6 +954,27 @@ class AstBuilder extends ScopeListener {
}
}
+ @override
+ void handleInvalidExpression(Token token) {
+ debugEvent("InvalidExpression");
+ }
+
+ @override
+ Token handleUnrecoverableError(Token token, ErrorKind kind, Map arguments) {
+ if (kind == ErrorKind.ExpectedExpression) {
+ String lexeme = token.lexeme;
+ if (identical('async', lexeme) || identical('yield', lexeme)) {
+ errorReporter?.reportErrorForOffset(
+ ParserErrorCode.ASYNC_KEYWORD_USED_AS_IDENTIFIER,
+ token.charOffset,
+ token.charCount);
+ push(ast.simpleIdentifier(toAnalyzerToken(token)));
+ return token;
+ }
+ }
+ return super.handleUnrecoverableError(token, kind, arguments);
+ }
+
void handleUnaryPrefixExpression(Token token) {
debugEvent("UnaryPrefixExpression");
push(ast.prefixExpression(toAnalyzerToken(token), pop()));
« no previous file with comments | « pkg/front_end/lib/src/fasta/analyzer/analyzer_diet_listener.dart ('k') | pkg/front_end/tool/fasta_perf.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698