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

Unified Diff: pkg/front_end/lib/src/fasta/source/directive_listener.dart

Issue 2889463002: Fixes for review comments. (Closed)
Patch Set: Fixes and tweaks. Created 3 years, 7 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
« no previous file with comments | « no previous file | pkg/front_end/lib/src/incremental/file_state.dart » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 81c33f46f7c9a9da83e2412a9eeffe33400bf06c..03e0426592d1ca44b93e4823fc8f870668c1da2b 100644
--- a/pkg/front_end/lib/src/fasta/source/directive_listener.dart
+++ b/pkg/front_end/lib/src/fasta/source/directive_listener.dart
@@ -6,12 +6,11 @@
/// import, part, and export directives.
library front_end.src.fasta.source.directive_listener;
+import '../../scanner/token.dart' show Token;
import '../fasta_codes.dart' show FastaMessage, codeExpectedBlockToSkip;
import '../parser/identifier_context.dart';
import '../parser/listener.dart';
import '../quote.dart';
-import '../../scanner/token.dart' show Token;
-import 'stack_listener.dart';
/// Listener that records imports, exports, and part directives.
///
@@ -21,95 +20,91 @@ import 'stack_listener.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 {
- final Stack _stack = new Stack();
-
- /// Export directives with URIs and combinators.
- final List<ImportDirective> imports = <ImportDirective>[];
+ /// Import directives with URIs and combinators.
+ final List<NamespaceDirective> imports = <NamespaceDirective>[];
/// Export directives with URIs and combinators.
- final List<ExportDirective> exports = <ExportDirective>[];
+ final List<NamespaceDirective> exports = <NamespaceDirective>[];
/// Collects URIs that occur on any part directive.
final Set<String> parts = new Set<String>();
- bool _inDirective = false;
+ bool _inPart = false;
+ String _uri;
+ List<NamespaceCombinator> _combinators;
+ List<String> _combinatorNames;
DirectiveListener();
@override
- beginExport(_) {
- _inDirective = true;
+ beginExport(Token export) {
+ _combinators = <NamespaceCombinator>[];
}
@override
- beginImport(_) {
- _inDirective = true;
+ void beginHide(Token hide) {
+ _combinatorNames = <String>[];
}
@override
- void beginLiteralString(Token token) {
- if (_inDirective) {
- _push(unescapeString(token.lexeme));
- }
+ beginImport(Token import) {
+ _combinators = <NamespaceCombinator>[];
}
@override
- beginPart(_) {
- _inDirective = true;
+ void beginLiteralString(Token token) {
+ if (_combinators != null || _inPart) {
+ _uri = unescapeString(token.lexeme);
+ }
}
@override
- void endCombinators(int count) {
- List<String> names = _popList(count);
- _push(names);
+ beginPart(Token part) {
+ _inPart = true;
}
@override
- endExport(export, semicolon) {
- List<NamespaceCombinator> combinators = _pop();
- String uri = _pop();
- exports.add(new ExportDirective(uri, combinators));
- _inDirective = false;
+ void beginShow(Token show) {
+ _combinatorNames = <String>[];
}
@override
- void endHide(Token hideKeyword) {
- List<String> names = _pop();
- _push(new NamespaceCombinator.hide(names));
+ endExport(Token export, Token semicolon) {
+ exports.add(new NamespaceDirective.export(_uri, _combinators));
+ _uri = null;
+ _combinators = null;
}
@override
- void endIdentifierList(int count) {
- if (_inDirective) {
- _push(_popList(count) ?? <String>[]);
- }
+ void endHide(Token hide) {
+ _combinators.add(new NamespaceCombinator.hide(_combinatorNames));
+ _combinatorNames = null;
}
@override
- endImport(import, deferred, asKeyword, semicolon) {
- List<NamespaceCombinator> combinators = _pop();
- String uri = _pop();
- imports.add(new ImportDirective(uri, combinators));
- _inDirective = false;
+ endImport(Token import, Token deferred, Token asKeyword, Token semicolon) {
+ imports.add(new NamespaceDirective.import(_uri, _combinators));
+ _uri = null;
+ _combinators = null;
}
@override
- endPart(part, semicolon) {
- String uri = _pop();
- parts.add(uri);
- _inDirective = false;
+ endPart(Token part, Token semicolon) {
+ parts.add(_uri);
+ _uri = null;
+ _inPart = false;
}
@override
- void endShow(Token showKeyword) {
- List<String> names = _pop();
- _push(new NamespaceCombinator.show(names));
+ void endShow(Token show) {
+ _combinators.add(new NamespaceCombinator.show(_combinatorNames));
+ _combinatorNames = null;
}
@override
void handleIdentifier(Token token, IdentifierContext context) {
- if (_inDirective && context == IdentifierContext.combinator) {
- _push(token.lexeme);
+ if (_combinatorNames != null && context == IdentifierContext.combinator) {
+ _combinatorNames.add(token.lexeme);
}
}
@@ -125,33 +120,6 @@ class DirectiveListener extends Listener {
}
return super.handleUnrecoverableError(token, message);
}
-
- T _pop<T>() {
- var value = _stack.pop() as T;
- return value;
- }
-
- List<T> _popList<T>(int n) {
- return _stack.popList(n);
- }
-
- void _push<T>(T value) {
- _stack.push(value);
- }
-}
-
-class ExportDirective {
- final String uri;
- final List<NamespaceCombinator> combinators;
-
- ExportDirective(this.uri, this.combinators);
-}
-
-class ImportDirective {
- final String uri;
- final List<NamespaceCombinator> combinators;
-
- ImportDirective(this.uri, this.combinators);
}
class NamespaceCombinator {
@@ -166,3 +134,13 @@ class NamespaceCombinator {
: isShow = true,
names = names.toSet();
}
+
+class NamespaceDirective {
+ final bool isImport;
+ final String uri;
+ final List<NamespaceCombinator> combinators;
+
+ NamespaceDirective.export(this.uri, this.combinators) : isImport = false;
+
+ NamespaceDirective.import(this.uri, this.combinators) : isImport = true;
+}
« no previous file with comments | « no previous file | pkg/front_end/lib/src/incremental/file_state.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698