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

Unified Diff: dart/pkg/compiler/lib/src/scanner/listener.dart

Issue 808953004: Recover from fatal parser errors. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge
Patch Set: Merged with r42860. Created 5 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: dart/pkg/compiler/lib/src/scanner/listener.dart
diff --git a/dart/pkg/compiler/lib/src/scanner/listener.dart b/dart/pkg/compiler/lib/src/scanner/listener.dart
index 338b5dc914a147828e7cb5fcd117be9eca3ffeff..79d6a11a3af6d67ca4f8976f885844f043f4f167 100644
--- a/dart/pkg/compiler/lib/src/scanner/listener.dart
+++ b/dart/pkg/compiler/lib/src/scanner/listener.dart
@@ -805,9 +805,10 @@ class ElementListener extends Listener {
bool suppressParseErrors = false;
- ElementListener(DiagnosticListener listener,
- this.compilationUnitElement,
- this.idGenerator)
+ ElementListener(
+ DiagnosticListener listener,
+ this.compilationUnitElement,
+ this.idGenerator)
: this.listener = listener,
stringValidator = new StringValidator(listener),
interpolationScope = const Link<StringQuoting>();
@@ -1465,13 +1466,10 @@ class ElementListener extends Listener {
/// Don't call this method. Should only be used as a last resort when there
/// is no feasible way to recover from a parser error.
- void reportFatalError(Spannable spannable,
- String message) {
- listener.reportError(
- spannable, MessageKind.GENERIC, {'text': message});
- // Some parse errors are infeasible to recover from, so we abort
- // compilation instead.
- throw new CompilerCancelledException(message);
+ void reportFatalError(Spannable spannable, String message) {
+ reportError(spannable, MessageKind.GENERIC, {'text': message});
+ // Some parse errors are infeasible to recover from, so we throw an error.
+ throw new ParserError(message);
}
void reportError(Spannable spannable,
@@ -1487,28 +1485,11 @@ class ElementListener extends Listener {
}
class NodeListener extends ElementListener {
- final bool throwOnFatalError;
-
NodeListener(
DiagnosticListener listener,
- CompilationUnitElement element,
- {bool this.throwOnFatalError: false})
+ CompilationUnitElement element)
: super(listener, element, null);
- /// Don't call this method. Should only be used as a last resort when there
- /// is no feasible way to recover from a parser error.
- void reportFatalError(Spannable spannable,
- String message) {
- if (throwOnFatalError) {
- if (!currentMemberHasParseError && !suppressParseErrors) {
- reportError(spannable, MessageKind.GENERIC, {'text': message});
- }
- throw new ParserError(message);
- } else {
- super.reportFatalError(spannable, message);
- }
- }
-
void addLibraryTag(LibraryTag tag) {
pushNode(tag);
}
@@ -2511,8 +2492,7 @@ Node parse(DiagnosticListener diagnosticListener,
Element element,
doParse(Parser parser)) {
CompilationUnitElement unit = element.compilationUnit;
- NodeListener listener =
- new NodeListener(diagnosticListener, unit, throwOnFatalError: true);
+ NodeListener listener = new NodeListener(diagnosticListener, unit);
listener.memberErrors = listener.memberErrors.prepend(false);
try {
doParse(new Parser(listener));
« no previous file with comments | « dart/pkg/compiler/lib/src/scanner/class_element_parser.dart ('k') | dart/pkg/compiler/lib/src/scanner/parser_task.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698