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

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: 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..4074d3da21f70acf282b49c60e28bb9293c6c133 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;
@@ -58,7 +47,7 @@ class DillLibraryBuilder extends LibraryBuilder<KernelTypeBuilder, Library> {
/// The second element is the name of the exported element.
///
/// The third element (if present) is an error message.
ahe 2017/08/29 11:04:23 This documentation should be updated.
scheglov 2017/08/29 15:16:26 Done.
- List<List<String>> additionalExports;
+ List<Reference> additionalExports;
DillLibraryBuilder(this.uri, this.loader)
: super(uri, new Scope.top(), new Scope.top());
@@ -88,13 +77,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 +128,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));
ahe 2017/08/29 11:04:23 This code has two problems: 1. It creates new bui
scheglov 2017/08/29 15:16:26 How to get existing builders, when we already have
scheglov 2017/08/29 16:56:56 I fixed (1), and do nothing for (2) because (if I
+ } 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 {
+ throw new UnimplementedError('${node.runtimeType}');
ahe 2017/08/29 11:04:23 You should use one of the methods from ../problems
scheglov 2017/08/29 15:16:26 Done.
}
}
}

Powered by Google App Engine
This is Rietveld 408576698