Chromium Code Reviews| 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.
|
| } |
| } |
| } |