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

Unified Diff: runtime/bin/loader.cc

Issue 2186423002: Only reload libraries when they may have been modified. (Closed) Base URL: git@github.com:dart-lang/sdk.git@master
Patch Set: Code review Created 4 years, 5 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/bin/loader.h ('k') | runtime/bin/main.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: runtime/bin/loader.cc
diff --git a/runtime/bin/loader.cc b/runtime/bin/loader.cc
index cf6f4ec7a365c72a097fa60c4778f87deb7a4659..22204788a81b4197e7021f6c7f70665417e66e8d 100644
--- a/runtime/bin/loader.cc
+++ b/runtime/bin/loader.cc
@@ -66,14 +66,16 @@ Loader::~Loader() {
// Copy the contents of |message| into an |IOResult|.
void Loader::IOResult::Setup(Dart_CObject* message) {
ASSERT(message->type == Dart_CObject_kArray);
- ASSERT(message->value.as_array.length == 4);
+ ASSERT(message->value.as_array.length == 5);
Dart_CObject* tag_message = message->value.as_array.values[0];
ASSERT(tag_message != NULL);
Dart_CObject* uri_message = message->value.as_array.values[1];
ASSERT(uri_message != NULL);
- Dart_CObject* library_uri_message = message->value.as_array.values[2];
+ Dart_CObject* resolved_uri_message = message->value.as_array.values[2];
+ ASSERT(resolved_uri_message != NULL);
+ Dart_CObject* library_uri_message = message->value.as_array.values[3];
ASSERT(library_uri_message != NULL);
- Dart_CObject* payload_message = message->value.as_array.values[3];
+ Dart_CObject* payload_message = message->value.as_array.values[4];
ASSERT(payload_message != NULL);
// Grab the tag.
@@ -84,6 +86,10 @@ void Loader::IOResult::Setup(Dart_CObject* message) {
ASSERT(uri_message->type == Dart_CObject_kString);
uri = strdup(uri_message->value.as_string);
+ // Grab the resolved uri.
+ ASSERT(resolved_uri_message->type == Dart_CObject_kString);
+ resolved_uri = strdup(resolved_uri_message->value.as_string);
+
// Grab the library uri if one is present.
if (library_uri_message->type != Dart_CObject_kNull) {
ASSERT(library_uri_message->type == Dart_CObject_kString);
@@ -113,6 +119,7 @@ void Loader::IOResult::Setup(Dart_CObject* message) {
void Loader::IOResult::Cleanup() {
free(uri);
+ free(resolved_uri);
free(library_uri);
free(payload);
}
@@ -268,6 +275,8 @@ bool Loader::ProcessResultLocked(Loader* loader, Loader::IOResult* result) {
// dropping the lock below |result| may no longer valid.
Dart_Handle uri =
Dart_NewStringFromCString(reinterpret_cast<char*>(result->uri));
+ Dart_Handle resolved_uri =
+ Dart_NewStringFromCString(reinterpret_cast<char*>(result->resolved_uri));
Dart_Handle library_uri = Dart_Null();
if (result->library_uri != NULL) {
library_uri =
@@ -360,20 +369,20 @@ bool Loader::ProcessResultLocked(Loader* loader, Loader::IOResult* result) {
switch (tag) {
case Dart_kImportTag:
- dart_result = Dart_LoadLibrary(uri, source, 0, 0);
+ dart_result = Dart_LoadLibrary(uri, resolved_uri, source, 0, 0);
break;
case Dart_kSourceTag: {
ASSERT(library_uri != Dart_Null());
Dart_Handle library = Dart_LookupLibrary(library_uri);
ASSERT(!Dart_IsError(library));
- dart_result = Dart_LoadSource(library, uri, source, 0, 0);
+ dart_result = Dart_LoadSource(library, uri, resolved_uri, source, 0, 0);
}
break;
case Dart_kScriptTag:
if (is_snapshot) {
dart_result = Dart_LoadScriptFromSnapshot(payload, payload_length);
} else {
- dart_result = Dart_LoadScript(uri, source, 0, 0);
+ dart_result = Dart_LoadScript(uri, resolved_uri, source, 0, 0);
}
break;
default:
@@ -653,7 +662,7 @@ Dart_Handle Loader::DartColonLibraryTagHandler(Dart_LibraryTag tag,
Dart_Handle part_uri_obj = DartUtils::NewString(part_uri);
free(part_uri);
return Dart_LoadSource(library,
- part_uri_obj,
+ part_uri_obj, Dart_Null(),
Builtin::PartSource(id, url_string), 0, 0);
}
// All cases should have been handled above.
« no previous file with comments | « runtime/bin/loader.h ('k') | runtime/bin/main.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698