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

Unified Diff: runtime/vm/parser.cc

Issue 10407042: spawnUri. Take two. This time I'll wait for Anton before committing :-). (Closed) Base URL: http://dart.googlecode.com/svn/branches/bleeding_edge/dart/
Patch Set: Created 8 years, 7 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « runtime/vm/parser.h ('k') | runtime/vm/raw_object.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: runtime/vm/parser.cc
===================================================================
--- runtime/vm/parser.cc (revision 7916)
+++ runtime/vm/parser.cc (working copy)
@@ -3530,8 +3530,7 @@
Dart_Handle Parser::CallLibraryTagHandler(Dart_LibraryTag tag,
intptr_t token_pos,
- const String& url,
- const Array& import_map) {
+ const String& url) {
Isolate* isolate = Isolate::Current();
Dart_LibraryTagHandler handler = isolate->library_tag_handler();
if (handler == NULL) {
@@ -3539,8 +3538,7 @@
}
Dart_Handle result = handler(tag,
Api::NewHandle(isolate, library_.raw()),
- Api::NewHandle(isolate, url.raw()),
- Api::NewHandle(isolate, import_map.raw()));
+ Api::NewHandle(isolate, url.raw()));
if (Dart_IsError(result)) {
Error& prev_error = Error::Handle();
prev_error ^= Api::UnwrapHandle(result);
@@ -3580,17 +3578,15 @@
}
ExpectToken(Token::kRPAREN);
ExpectToken(Token::kSEMICOLON);
- const Array& import_map = Array::Handle(library_.import_map());
Dart_Handle handle = CallLibraryTagHandler(kCanonicalizeUrl,
import_pos,
- url,
- import_map);
+ url);
const String& canon_url = String::CheckedHandle(Api::UnwrapHandle(handle));
// Lookup the library URL.
Library& library = Library::Handle(Library::LookupLibrary(canon_url));
if (library.IsNull()) {
// Call the library tag handler to load the library.
- CallLibraryTagHandler(kImportTag, import_pos, canon_url, import_map);
+ CallLibraryTagHandler(kImportTag, import_pos, canon_url);
// If the library tag handler succeded without registering the
// library we create an empty library to import.
library = Library::LookupLibrary(canon_url);
@@ -3618,7 +3614,6 @@
void Parser::ParseLibraryInclude() {
TRACE_PARSER("ParseLibraryInclude");
- const Array& import_map = Array::Handle(library_.import_map());
while (CurrentToken() == Token::kSOURCE) {
const intptr_t source_pos = token_index_;
ConsumeToken();
@@ -3631,10 +3626,9 @@
ExpectToken(Token::kSEMICOLON);
Dart_Handle handle = CallLibraryTagHandler(kCanonicalizeUrl,
source_pos,
- url,
- import_map);
+ url);
const String& canon_url = String::CheckedHandle(Api::UnwrapHandle(handle));
- CallLibraryTagHandler(kSourceTag, source_pos, canon_url, import_map);
+ CallLibraryTagHandler(kSourceTag, source_pos, canon_url);
}
}
@@ -7216,9 +7210,20 @@
// when the script is loaded.
RawString* Parser::ResolveImportVar(intptr_t ident_pos, const String& ident) {
TRACE_PARSER("ResolveImportVar");
- String& map_name = String::Handle(library_.LookupImportMap(ident));
- if (!map_name.IsNull()) {
- return map_name.raw();
+ const Array& import_map =
+ Array::Handle(Isolate::Current()->object_store()->import_map());
+ if (!import_map.IsNull()) {
+ intptr_t length = import_map.Length();
+ intptr_t index = 0;
+ String& name = String::Handle();
+ while (index < (length - 1)) {
+ name ^= import_map.At(index);
+ if (name.Equals(ident)) {
+ name ^= import_map.At(index + 1);
+ return name.raw();
+ }
+ index += 2;
+ }
}
ErrorMsg(ident_pos, "import variable '%s' has not been defined",
ident.ToCString());
« no previous file with comments | « runtime/vm/parser.h ('k') | runtime/vm/raw_object.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698