Index: pkg/front_end/lib/src/fasta/source/directive_listener.dart |
diff --git a/pkg/front_end/lib/src/fasta/source/directive_listener.dart b/pkg/front_end/lib/src/fasta/source/directive_listener.dart |
index 2adf931162d80de7e7e4b86f3420fb8a2e382937..278b44a02bb6977e887a4ca222d5a215591b163c 100644 |
--- a/pkg/front_end/lib/src/fasta/source/directive_listener.dart |
+++ b/pkg/front_end/lib/src/fasta/source/directive_listener.dart |
@@ -7,6 +7,7 @@ |
library front_end.src.fasta.source.directive_listener; |
import '../fasta_codes.dart' show FastaMessage, codeExpectedBlockToSkip; |
+import '../parser/dart_vm_native.dart' show skipNativeClause; |
import '../parser/listener.dart'; |
import '../quote.dart'; |
import '../scanner/token.dart'; |
@@ -19,6 +20,9 @@ import '../scanner/token.dart'; |
/// any top-level declaration, but we recommend to continue parsing the entire |
/// file in order to gracefully handle input errors. |
class DirectiveListener extends Listener { |
+ /// Whether we accept the native-syntax used by the VM patch files. |
+ final bool acceptsNativeClause; |
+ |
/// Collects URIs that occur on any import directive. |
final Set<String> imports = new Set<String>(); |
@@ -28,7 +32,7 @@ class DirectiveListener extends Listener { |
/// Collects URIs that occur on any part directive. |
final Set<String> parts = new Set<String>(); |
- DirectiveListener(); |
+ DirectiveListener({this.acceptsNativeClause: false}); |
/// Set when entering the context of a directive, null when the parser is not |
/// looking at a directive. |
@@ -75,14 +79,10 @@ class DirectiveListener extends Listener { |
@override |
Token handleUnrecoverableError(Token token, FastaMessage message) { |
- if (message.code == codeExpectedBlockToSkip) { |
- Token recover = handleNativeClause(token); |
+ if (acceptsNativeClause && message.code == codeExpectedBlockToSkip) { |
+ Token recover = skipNativeClause(token); |
if (recover != null) return recover; |
} |
return super.handleUnrecoverableError(token, message); |
} |
- |
- /// Defines how native clauses are handled. By default, they are not handled |
- /// and an error is thrown; |
- Token handleNativeClause(Token token) => null; |
} |