| Index: sdk/lib/_internal/compiler/implementation/library_loader.dart
|
| diff --git a/sdk/lib/_internal/compiler/implementation/library_loader.dart b/sdk/lib/_internal/compiler/implementation/library_loader.dart
|
| index 7ebe1f312b791461c09e18e848b1f8d0dc2d31df..c9b2d5c4f3938fed74fcefb0f1b57f879876c97f 100644
|
| --- a/sdk/lib/_internal/compiler/implementation/library_loader.dart
|
| +++ b/sdk/lib/_internal/compiler/implementation/library_loader.dart
|
| @@ -111,25 +111,12 @@ abstract class LibraryLoader extends CompilerTask {
|
| *
|
| * This is the main entry point for [LibraryLoader].
|
| */
|
| - // TODO(johnniwinther): Remove [canonicalUri] together with
|
| - // [Compiler.scanBuiltinLibrary].
|
| - Future<LibraryElement> loadLibrary(Uri resolvedUri, Node node,
|
| - Uri canonicalUri);
|
| + Future<LibraryElement> loadLibrary(Uri resolvedUri);
|
|
|
| // TODO(johnniwinther): Remove this when patches don't need special parsing.
|
| Future registerLibraryFromTag(LibraryDependencyHandler handler,
|
| LibraryElement library,
|
| LibraryDependency tag);
|
| -
|
| - /**
|
| - * Adds the elements in the export scope of [importedLibrary] to the import
|
| - * scope of [importingLibrary].
|
| - */
|
| - // TODO(johnniwinther): Move handling of 'js_helper' to the library loader
|
| - // to remove this method from the [LibraryLoader] interface.
|
| - void importLibrary(LibraryElement importingLibrary,
|
| - LibraryElement importedLibrary,
|
| - Import tag);
|
| }
|
|
|
| /**
|
| @@ -221,7 +208,6 @@ class HideFilter extends CombinatorFilter {
|
| class LibraryLoaderTask extends LibraryLoader {
|
| LibraryLoaderTask(Compiler compiler) : super(compiler);
|
| String get name => 'LibraryLoader';
|
| - List onLibraryLoadedCallbacks = [];
|
|
|
| final Map<Uri, LibraryElement> libraryResourceUriMap =
|
| new Map<Uri, LibraryElement>();
|
| @@ -230,22 +216,25 @@ class LibraryLoaderTask extends LibraryLoader {
|
|
|
| LibraryDependencyHandler currentHandler;
|
|
|
| - Future<LibraryElement> loadLibrary(Uri resolvedUri, Node node,
|
| - Uri canonicalUri) {
|
| + Future<LibraryElement> loadLibrary(Uri resolvedUri) {
|
| return measure(() {
|
| assert(currentHandler == null);
|
| // TODO(johnniwinther): Ensure that currentHandler correctly encloses the
|
| // loading of a library cluster.
|
| currentHandler = new LibraryDependencyHandler(compiler);
|
| - return createLibrary(currentHandler, null, resolvedUri, node,
|
| - canonicalUri).then((LibraryElement library) {
|
| + return createLibrary(currentHandler, null, resolvedUri)
|
| + .then((LibraryElement library) {
|
| return compiler.withCurrentElement(library, () {
|
| return measure(() {
|
| currentHandler.computeExports();
|
| + Map<Uri, LibraryElement> loadedLibraries = <Uri, LibraryElement>{};
|
| + currentHandler.loadedLibraries.forEach(
|
| + (LibraryElement loadedLibrary) {
|
| + loadedLibraries[loadedLibrary.canonicalUri] = loadedLibrary;
|
| + });
|
| currentHandler = null;
|
| - var workList = onLibraryLoadedCallbacks;
|
| - onLibraryLoadedCallbacks = [];
|
| - return Future.forEach(workList, (f) => f()).then((_) => library);
|
| + return compiler.onLibrariesLoaded(loadedLibraries)
|
| + .then((_) => library);
|
| });
|
| });
|
| });
|
| @@ -312,6 +301,8 @@ class LibraryLoaderTask extends LibraryLoader {
|
| }
|
| });
|
| }).then((_) {
|
| + // TODO(johnniwinther): Move callback to after patching.
|
| + compiler.onLibraryScanned(library);
|
| return compiler.withCurrentElement(library, () {
|
| checkDuplicatedLibraryName(library);
|
| // Apply patch, if any.
|
| @@ -389,15 +380,15 @@ class LibraryLoaderTask extends LibraryLoader {
|
| }
|
|
|
| Uri coreUri = new Uri(scheme: 'dart', path: 'core');
|
| - return createLibrary(handler, null, coreUri, null, coreUri)
|
| - .then((LibraryElement library) {
|
| + return createLibrary(handler, null, coreUri).then((LibraryElement library) {
|
| compiler.coreLibrary = library;
|
| return library;
|
| });
|
| }
|
|
|
| Future patchDartLibrary(LibraryDependencyHandler handler,
|
| - LibraryElement library, String dartLibraryPath) {
|
| + LibraryElement library,
|
| + String dartLibraryPath) {
|
| if (library.isPatched) return new Future.value();
|
| Uri patchUri = compiler.resolvePatchUri(dartLibraryPath);
|
| if (patchUri == null) return new Future.value();
|
| @@ -440,7 +431,7 @@ class LibraryLoaderTask extends LibraryLoader {
|
| LibraryDependency tag) {
|
| Uri base = library.entryCompilationUnit.script.readableUri;
|
| Uri resolvedUri = base.resolve(tag.uri.dartString.slowToString());
|
| - return createLibrary(handler, library, resolvedUri, tag.uri, resolvedUri)
|
| + return createLibrary(handler, library, resolvedUri, tag.uri)
|
| .then((LibraryElement loadedLibrary) {
|
| if (loadedLibrary == null) return;
|
| compiler.withCurrentElement(library, () {
|
| @@ -455,22 +446,16 @@ class LibraryLoaderTask extends LibraryLoader {
|
| *
|
| * If a new library is created, the [handler] is notified.
|
| */
|
| - // TODO(johnniwinther): Remove [canonicalUri] and make [resolvedUri] the
|
| - // canonical uri when [Compiler.scanBuiltinLibrary] is removed.
|
| Future<LibraryElement> createLibrary(LibraryDependencyHandler handler,
|
| LibraryElement importingLibrary,
|
| Uri resolvedUri,
|
| - Node node,
|
| - Uri canonicalUri) {
|
| + [Node node]) {
|
| // TODO(johnniwinther): Create erroneous library elements for missing
|
| // libraries.
|
| Uri readableUri =
|
| compiler.translateResolvedUri(importingLibrary, resolvedUri, node);
|
| if (readableUri == null) return new Future.value();
|
| - LibraryElement library;
|
| - if (canonicalUri != null) {
|
| - library = compiler.libraries[canonicalUri.toString()];
|
| - }
|
| + LibraryElement library = compiler.libraries[resolvedUri.toString()];
|
| if (library != null) {
|
| return new Future.value(library);
|
| }
|
| @@ -478,35 +463,23 @@ class LibraryLoaderTask extends LibraryLoader {
|
| return compiler.readScript(node, readableUri)
|
| .then((Script script) {
|
| if (script == null) return null;
|
| - LibraryElement element = new LibraryElementX(script, canonicalUri);
|
| + LibraryElement element = new LibraryElementX(script, resolvedUri);
|
| compiler.withCurrentElement(element, () {
|
| + compiler.onLibraryCreated(element);
|
| handler.registerNewLibrary(element);
|
| native.maybeEnableNative(compiler, element);
|
| - if (canonicalUri != null) {
|
| - compiler.libraries[canonicalUri.toString()] = element;
|
| - }
|
| + compiler.libraries[resolvedUri.toString()] = element;
|
| compiler.scanner.scanLibrary(element);
|
| });
|
| return processLibraryTags(handler, element).then((_) {
|
| compiler.withCurrentElement(element, () {
|
| handler.registerLibraryExports(element);
|
| - onLibraryLoadedCallbacks.add(
|
| - () => compiler.onLibraryLoaded(element, resolvedUri));
|
| });
|
| return element;
|
| });
|
| });
|
| });
|
| }
|
| -
|
| - // TODO(johnniwinther): Remove this method when 'js_helper' is handled by
|
| - // [LibraryLoaderTask].
|
| - void importLibrary(LibraryElement importingLibrary,
|
| - LibraryElement importedLibrary,
|
| - Import tag) {
|
| - new ImportLink(tag, importedLibrary).importLibrary(compiler,
|
| - importingLibrary);
|
| - }
|
| }
|
|
|
|
|
| @@ -843,11 +816,14 @@ class LibraryDependencyHandler {
|
| * part of the dependency graph of this handler since their export scopes have
|
| * already been computed.
|
| */
|
| - Map<LibraryElement,LibraryDependencyNode> nodeMap =
|
| - new Map<LibraryElement,LibraryDependencyNode>();
|
| + Map<LibraryElement, LibraryDependencyNode> nodeMap =
|
| + new Map<LibraryElement, LibraryDependencyNode>();
|
|
|
| LibraryDependencyHandler(Compiler this.compiler);
|
|
|
| + /// The libraries loaded with this handler.
|
| + Iterable<LibraryElement> get loadedLibraries => nodeMap.keys;
|
| +
|
| /**
|
| * Performs a fixed-point computation on the export scopes of all registered
|
| * libraries and creates the import/export of the libraries based on the
|
|
|