Index: runtime/vm/parser.cc |
=================================================================== |
--- runtime/vm/parser.cc (revision 37317) |
+++ runtime/vm/parser.cc (working copy) |
@@ -5163,16 +5163,20 @@ |
// Canonicalize library URL. |
const String& canon_url = String::CheckedHandle( |
CallLibraryTagHandler(Dart_kCanonicalizeUrl, import_pos, url)); |
- // Lookup the library URL. |
- Library& library = Library::Handle(isolate(), |
- Library::LookupLibrary(canon_url)); |
+ |
+ // Create a new library if it does not exist yet. |
+ Library& library = |
+ Library::Handle(isolate(), Library::LookupLibrary(canon_url)); |
if (library.IsNull()) { |
- // Create an empty library to mark that we have initiated loading of this |
- // library. |
library = Library::New(canon_url); |
library.Register(); |
- // Call the library tag handler to load the library. |
- // TODO(hausner): do not load eagerly if import is deferred. |
+ } |
+ |
+ // If loading hasn't been requested yet, and if this is not a deferred |
+ // library import, call the library tag handler to request loading |
+ // the library. |
+ if (library.LoadNotStarted() && !is_deferred_import) { |
+ library.SetLoadRequested(); |
CallLibraryTagHandler(Dart_kImportTag, import_pos, canon_url); |
} |
@@ -5209,7 +5213,8 @@ |
} |
library_prefix.AddImport(ns); |
} else { |
- library_prefix = LibraryPrefix::New(prefix, ns, is_deferred_import); |
+ library_prefix = |
+ LibraryPrefix::New(prefix, ns, is_deferred_import, library_); |
library_.AddObject(library_prefix, prefix); |
} |
} |