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

Side by Side Diff: runtime/vm/parser.cc

Issue 328923002: Lazy loading of deferred libraries (Closed) Base URL: http://dart.googlecode.com/svn/branches/bleeding_edge/dart/
Patch Set: Created 6 years, 6 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 unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « runtime/vm/object.cc ('k') | runtime/vm/raw_object.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file
2 // for details. All rights reserved. Use of this source code is governed by a 2 // for details. All rights reserved. Use of this source code is governed by a
3 // BSD-style license that can be found in the LICENSE file. 3 // BSD-style license that can be found in the LICENSE file.
4 4
5 #include "vm/parser.h" 5 #include "vm/parser.h"
6 6
7 #include "lib/invocation_mirror.h" 7 #include "lib/invocation_mirror.h"
8 #include "platform/utils.h" 8 #include "platform/utils.h"
9 #include "vm/bootstrap.h" 9 #include "vm/bootstrap.h"
10 #include "vm/class_finalizer.h" 10 #include "vm/class_finalizer.h"
(...skipping 5145 matching lines...) Expand 10 before | Expand all | Expand 10 after
5156 } 5156 }
5157 if (hide_list.Length() > 0) { 5157 if (hide_list.Length() > 0) {
5158 hide_names = Array::MakeArray(hide_list); 5158 hide_names = Array::MakeArray(hide_list);
5159 } 5159 }
5160 } 5160 }
5161 ExpectSemicolon(); 5161 ExpectSemicolon();
5162 5162
5163 // Canonicalize library URL. 5163 // Canonicalize library URL.
5164 const String& canon_url = String::CheckedHandle( 5164 const String& canon_url = String::CheckedHandle(
5165 CallLibraryTagHandler(Dart_kCanonicalizeUrl, import_pos, url)); 5165 CallLibraryTagHandler(Dart_kCanonicalizeUrl, import_pos, url));
5166 // Lookup the library URL. 5166
5167 Library& library = Library::Handle(isolate(), 5167 // Create a new library if it does not exist yet.
5168 Library::LookupLibrary(canon_url)); 5168 Library& library =
5169 Library::Handle(isolate(), Library::LookupLibrary(canon_url));
5169 if (library.IsNull()) { 5170 if (library.IsNull()) {
5170 // Create an empty library to mark that we have initiated loading of this
5171 // library.
5172 library = Library::New(canon_url); 5171 library = Library::New(canon_url);
5173 library.Register(); 5172 library.Register();
5174 // Call the library tag handler to load the library. 5173 }
5175 // TODO(hausner): do not load eagerly if import is deferred. 5174
5175 // If loading hasn't been requested yet, and if this is not a deferred
5176 // library import, call the library tag handler to request loading
5177 // the library.
5178 if (library.LoadNotStarted() && !is_deferred_import) {
5179 library.SetLoadRequested();
5176 CallLibraryTagHandler(Dart_kImportTag, import_pos, canon_url); 5180 CallLibraryTagHandler(Dart_kImportTag, import_pos, canon_url);
5177 } 5181 }
5178 5182
5179 Namespace& ns = Namespace::Handle(isolate(), 5183 Namespace& ns = Namespace::Handle(isolate(),
5180 Namespace::New(library, show_names, hide_names)); 5184 Namespace::New(library, show_names, hide_names));
5181 if (metadata_pos >= 0) { 5185 if (metadata_pos >= 0) {
5182 ns.AddMetadata(metadata_pos, current_class()); 5186 ns.AddMetadata(metadata_pos, current_class());
5183 } 5187 }
5184 5188
5185 if (is_import) { 5189 if (is_import) {
(...skipping 16 matching lines...) Expand all
5202 if (!is_deferred_import && library_prefix.is_deferred_load()) { 5206 if (!is_deferred_import && library_prefix.is_deferred_load()) {
5203 ErrorMsg(prefix_pos, 5207 ErrorMsg(prefix_pos,
5204 "prefix '%s' already used in a deferred import clause", 5208 "prefix '%s' already used in a deferred import clause",
5205 prefix.ToCString()); 5209 prefix.ToCString());
5206 } 5210 }
5207 if (is_deferred_import) { 5211 if (is_deferred_import) {
5208 ErrorMsg(prefix_pos, "prefix of deferred import must be uniqe"); 5212 ErrorMsg(prefix_pos, "prefix of deferred import must be uniqe");
5209 } 5213 }
5210 library_prefix.AddImport(ns); 5214 library_prefix.AddImport(ns);
5211 } else { 5215 } else {
5212 library_prefix = LibraryPrefix::New(prefix, ns, is_deferred_import); 5216 library_prefix =
5217 LibraryPrefix::New(prefix, ns, is_deferred_import, library_);
5213 library_.AddObject(library_prefix, prefix); 5218 library_.AddObject(library_prefix, prefix);
5214 } 5219 }
5215 } 5220 }
5216 } else { 5221 } else {
5217 ASSERT(is_export); 5222 ASSERT(is_export);
5218 library_.AddExport(ns); 5223 library_.AddExport(ns);
5219 } 5224 }
5220 } 5225 }
5221 5226
5222 5227
(...skipping 5856 matching lines...) Expand 10 before | Expand all | Expand 10 after
11079 void Parser::SkipQualIdent() { 11084 void Parser::SkipQualIdent() {
11080 ASSERT(IsIdentifier()); 11085 ASSERT(IsIdentifier());
11081 ConsumeToken(); 11086 ConsumeToken();
11082 if (CurrentToken() == Token::kPERIOD) { 11087 if (CurrentToken() == Token::kPERIOD) {
11083 ConsumeToken(); // Consume the kPERIOD token. 11088 ConsumeToken(); // Consume the kPERIOD token.
11084 ExpectIdentifier("identifier expected after '.'"); 11089 ExpectIdentifier("identifier expected after '.'");
11085 } 11090 }
11086 } 11091 }
11087 11092
11088 } // namespace dart 11093 } // namespace dart
OLDNEW
« no previous file with comments | « runtime/vm/object.cc ('k') | runtime/vm/raw_object.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698