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

Unified Diff: pkg/front_end/lib/src/fasta/dill/dill_library_builder.dart

Issue 3008763002: Store actual Reference(s) for additional exports. (Closed)
Patch Set: Updates for review comments. Created 3 years, 4 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/dill/dill_library_builder.dart
diff --git a/pkg/front_end/lib/src/fasta/dill/dill_library_builder.dart b/pkg/front_end/lib/src/fasta/dill/dill_library_builder.dart
index 48bcb98b9f1cf622846ee2cc37ff69860621e3a9..ecfa81f94ad95265cb2dcd998c49d47a5a154b51 100644
--- a/pkg/front_end/lib/src/fasta/dill/dill_library_builder.dart
+++ b/pkg/front_end/lib/src/fasta/dill/dill_library_builder.dart
@@ -4,20 +4,9 @@
library fasta.dill_library_builder;
-import 'dart:convert' show JSON;
-
import 'package:kernel/ast.dart'
- show
- Class,
- Field,
- Library,
- ListLiteral,
- Member,
- StaticGet,
- StringLiteral,
- Typedef;
-
-import '../fasta_codes.dart' show templateUnspecified;
+ show Class, Field, Library, ListLiteral, Member, StaticGet, Typedef;
+import 'package:kernel/ast.dart';
import '../problems.dart' show unimplemented;
@@ -47,18 +36,9 @@ class DillLibraryBuilder extends LibraryBuilder<KernelTypeBuilder, Library> {
Library library;
- /// Exports in addition to the members declared in this library.
- ///
- /// Each entry in the list is either two or three elements long.
- ///
- /// The first element is the library URI, if it is null, this is an ambiguous
- /// export and the list has three elements. Otherwise the list has two
- /// elements.
- ///
- /// The second element is the name of the exported element.
- ///
- /// The third element (if present) is an error message.
- List<List<String>> additionalExports;
+ /// References to nodes exported by the `export` directives, don't conflict
+ /// with each other, and not are hidden by local declarations.
+ List<Reference> additionalExports;
DillLibraryBuilder(this.uri, this.loader)
: super(uri, new Scope.top(), new Scope.top());
@@ -88,13 +68,7 @@ class DillLibraryBuilder extends LibraryBuilder<KernelTypeBuilder, Library> {
void addMember(Member member) {
String name = member.name.name;
- if (name == "_exports#") {
- Field field = member;
- StringLiteral string = field.initializer;
- additionalExports = JSON.decode(string.value);
- } else {
- addBuilder(name, new DillMemberBuilder(member, this), member.fileOffset);
- }
+ addBuilder(name, new DillMemberBuilder(member, this), member.fileOffset);
}
Builder addBuilder(String name, Builder builder, int charOffset) {
@@ -145,20 +119,19 @@ class DillLibraryBuilder extends LibraryBuilder<KernelTypeBuilder, Library> {
}
void finalizeExports() {
- if (additionalExports != null) {
- for (List<String> additionalExport in additionalExports) {
- String uriString = additionalExport[0];
- String name = additionalExport[1];
- Builder builder;
- if (uriString == null) {
- builder = new KernelInvalidTypeBuilder(name, -1, null,
- templateUnspecified.withArguments(additionalExport[2]));
- } else {
- DillLibraryBuilder library = loader.read(uri.resolve(uriString), -1);
- builder = library?.exportScopeBuilder[name] ??
- new KernelInvalidTypeBuilder(name, -1, null);
- }
- exportScopeBuilder.addMember(name, builder);
+ for (var reference in library.additionalExports) {
+ var node = reference.node;
+ if (node is Class) {
+ exportScopeBuilder.addMember(
+ node.name, new DillClassBuilder(node, this));
+ } else if (node is Member) {
+ exportScopeBuilder.addMember(
+ node.name.name, new DillMemberBuilder(node, this));
+ } else if (node is Typedef) {
+ exportScopeBuilder.addMember(
+ node.name, new DillFunctionTypeAliasBuilder(node, this));
+ } else {
+ unimplemented('${node.runtimeType}', -1, uri);
}
}
}

Powered by Google App Engine
This is Rietveld 408576698