| Index: pkg/kernel/lib/binary/ast_to_binary.dart
|
| diff --git a/pkg/kernel/lib/binary/ast_to_binary.dart b/pkg/kernel/lib/binary/ast_to_binary.dart
|
| index 0edfdd886af300e6086061ec0f33ef07e236a8f0..f82c20209b30e70e64b7d84092209a481df9829e 100644
|
| --- a/pkg/kernel/lib/binary/ast_to_binary.dart
|
| +++ b/pkg/kernel/lib/binary/ast_to_binary.dart
|
| @@ -21,7 +21,8 @@ class BinaryPrinter extends Visitor {
|
| final TypeParameterIndexer _typeParameterIndexer = new TypeParameterIndexer();
|
| final StringIndexer _stringIndexer = new StringIndexer();
|
| final StringIndexer _sourceUriIndexer = new StringIndexer();
|
| - Map<DeferredImport, int> _deferredImportIndexer = <DeferredImport, int>{};
|
| + Map<LibraryDependency, int> _libraryDependencyIndex =
|
| + <LibraryDependency, int>{};
|
|
|
| final BufferedSink _sink;
|
|
|
| @@ -92,6 +93,10 @@ class BinaryPrinter extends Visitor {
|
| writeUInt30(_stringIndexer[string]);
|
| }
|
|
|
| + void writeStringReferenceList(List<String> strings) {
|
| + writeList(strings, writeStringReference);
|
| + }
|
| +
|
| void writeUriReference(String string) {
|
| int index = _sourceUriIndexer[string];
|
| if (index == null) {
|
| @@ -179,10 +184,10 @@ class BinaryPrinter extends Visitor {
|
| }
|
| }
|
|
|
| - void writeDeferredImportReference(DeferredImport node) {
|
| - int index = _deferredImportIndexer[node];
|
| + void writeLibraryDependencyReference(LibraryDependency node) {
|
| + int index = _libraryDependencyIndex[node];
|
| if (index == null) {
|
| - throw 'Reference to deferred import $node out of scope';
|
| + throw 'Reference to library dependency $node out of scope';
|
| }
|
| writeUInt30(index);
|
| }
|
| @@ -250,28 +255,36 @@ class BinaryPrinter extends Visitor {
|
| writeStringReference(node.name ?? '');
|
| // TODO(jensj): We save (almost) the same URI twice.
|
| writeUriReference(node.fileUri ?? '');
|
| - writeDeferredImports(node);
|
| + writeLibraryDependencies(node);
|
| writeNodeList(node.typedefs);
|
| writeNodeList(node.classes);
|
| writeNodeList(node.fields);
|
| writeNodeList(node.procedures);
|
| }
|
|
|
| - void writeDeferredImports(Library library) {
|
| - _deferredImportIndexer = library.deferredImports.isEmpty
|
| - ? const <DeferredImport, int>{}
|
| - : <DeferredImport, int>{};
|
| - writeUInt30(library.deferredImports.length);
|
| - for (int i = 0; i < library.deferredImports.length; ++i) {
|
| - var importNode = library.deferredImports[i];
|
| - _deferredImportIndexer[importNode] = i;
|
| - writeDeferredImport(importNode);
|
| + void writeLibraryDependencies(Library library) {
|
| + _libraryDependencyIndex = library.dependencies.isEmpty
|
| + ? const <LibraryDependency, int>{}
|
| + : <LibraryDependency, int>{};
|
| + writeUInt30(library.dependencies.length);
|
| + for (int i = 0; i < library.dependencies.length; ++i) {
|
| + var importNode = library.dependencies[i];
|
| + _libraryDependencyIndex[importNode] = i;
|
| + writeLibraryDependency(importNode);
|
| }
|
| }
|
|
|
| - void writeDeferredImport(DeferredImport node) {
|
| - writeLibraryReference(node.importedLibrary);
|
| - writeStringReference(node.name);
|
| + void writeLibraryDependency(LibraryDependency node) {
|
| + writeByte(node.flags);
|
| + writeNodeList(node.annotations);
|
| + writeLibraryReference(node.targetLibrary);
|
| + writeStringReference(node.name ?? '');
|
| + writeNodeList(node.combinators);
|
| + }
|
| +
|
| + void visitCombinator(Combinator node) {
|
| + writeByte(node.isShow ? 1 : 0);
|
| + writeStringReferenceList(node.names);
|
| }
|
|
|
| void visitTypedef(Typedef node) {
|
| @@ -736,12 +749,12 @@ class BinaryPrinter extends Visitor {
|
|
|
| visitLoadLibrary(LoadLibrary node) {
|
| writeByte(Tag.LoadLibrary);
|
| - writeDeferredImportReference(node.import);
|
| + writeLibraryDependencyReference(node.import);
|
| }
|
|
|
| visitCheckLibraryIsLoaded(CheckLibraryIsLoaded node) {
|
| writeByte(Tag.CheckLibraryIsLoaded);
|
| - writeDeferredImportReference(node.import);
|
| + writeLibraryDependencyReference(node.import);
|
| }
|
|
|
| visitVectorCreation(VectorCreation node) {
|
| @@ -1227,8 +1240,18 @@ class StringIndexer extends RecursiveVisitor<Null> {
|
| node.visitChildren(this);
|
| }
|
|
|
| - visitDeferredImport(DeferredImport node) {
|
| + visitLibraryDependency(LibraryDependency node) {
|
| + putOptional(node.name);
|
| + node.visitChildren(this);
|
| + }
|
| +
|
| + visitCombinator(Combinator node) {
|
| + node.names.forEach(put);
|
| + }
|
| +
|
| + visitTypedef(Typedef node) {
|
| put(node.name);
|
| + node.visitChildren(this);
|
| }
|
|
|
| visitClass(Class node) {
|
|
|