Chromium Code Reviews| Index: runtime/lib/isolate.cc |
| diff --git a/runtime/lib/isolate.cc b/runtime/lib/isolate.cc |
| index f85726d1e02dc35b5a5fa8ee767d2f3ecb48bc7a..483da4177397a0de41dff6e1fa1b3aa5f4f76543 100644 |
| --- a/runtime/lib/isolate.cc |
| +++ b/runtime/lib/isolate.cc |
| @@ -18,6 +18,7 @@ |
| #include "vm/resolver.h" |
| #include "vm/snapshot.h" |
| #include "vm/symbols.h" |
| +#include "vm/unicode.h" |
| namespace dart { |
| @@ -141,6 +142,7 @@ static bool CanonicalizeUri(Isolate* isolate, |
| static bool CreateIsolate(Isolate* parent_isolate, |
| IsolateSpawnState* state, |
| + const char* package_root, |
| char** error) { |
| Dart_IsolateCreateCallback callback = Isolate::CreateCallback(); |
| if (callback == NULL) { |
| @@ -153,6 +155,7 @@ static bool CreateIsolate(Isolate* parent_isolate, |
| Isolate* child_isolate = reinterpret_cast<Isolate*>( |
| (callback)(state->script_url(), |
| state->function_name(), |
| + package_root, |
| init_data, |
| error)); |
| if (child_isolate == NULL) { |
| @@ -167,10 +170,11 @@ static bool CreateIsolate(Isolate* parent_isolate, |
| static RawObject* Spawn(Isolate* parent_isolate, |
| - IsolateSpawnState* state) { |
| + IsolateSpawnState* state, |
| + const char* package_root) { |
| // Create a new isolate. |
| char* error = NULL; |
| - if (!CreateIsolate(parent_isolate, state, &error)) { |
| + if (!CreateIsolate(parent_isolate, state, package_root, &error)) { |
| delete state; |
| const String& msg = String::Handle(String::New(error)); |
| free(error); |
| @@ -206,7 +210,9 @@ DEFINE_NATIVE_ENTRY(Isolate_spawnFunction, 3) { |
| ctx = Closure::context(closure); |
| ASSERT(ctx.num_variables() == 0); |
| #endif |
| - return Spawn(isolate, new IsolateSpawnState(port.Id(), func, message)); |
| + return Spawn(isolate, |
| + new IsolateSpawnState(port.Id(), func, message), |
| + NULL); |
|
turnidge
2014/09/08 16:40:48
Please add the package_root to IsolateSpawnState a
Anders Johnsen
2014/09/09 06:45:44
Done.
|
| } |
| } |
| const String& msg = String::Handle(String::New( |
| @@ -216,11 +222,12 @@ DEFINE_NATIVE_ENTRY(Isolate_spawnFunction, 3) { |
| } |
| -DEFINE_NATIVE_ENTRY(Isolate_spawnUri, 4) { |
| +DEFINE_NATIVE_ENTRY(Isolate_spawnUri, 5) { |
| GET_NON_NULL_NATIVE_ARGUMENT(SendPort, port, arguments->NativeArgAt(0)); |
| GET_NON_NULL_NATIVE_ARGUMENT(String, uri, arguments->NativeArgAt(1)); |
| GET_NON_NULL_NATIVE_ARGUMENT(Instance, args, arguments->NativeArgAt(2)); |
| GET_NON_NULL_NATIVE_ARGUMENT(Instance, message, arguments->NativeArgAt(3)); |
| + GET_NATIVE_ARGUMENT(String, package_root, arguments->NativeArgAt(4)); |
| // Canonicalize the uri with respect to the current isolate. |
| char* error = NULL; |
| @@ -233,8 +240,18 @@ DEFINE_NATIVE_ENTRY(Isolate_spawnUri, 4) { |
| ThrowIsolateSpawnException(msg); |
| } |
| - return Spawn(isolate, new IsolateSpawnState(port.Id(), canonical_uri, |
| - args, message)); |
| + char* utf8_package_root = NULL; |
| + if (!package_root.IsNull()) { |
| + const intptr_t len = Utf8::Length(package_root); |
| + Zone* zone = isolate->current_zone(); |
| + utf8_package_root = zone->Alloc<char>(len + 1); |
| + package_root.ToUTF8(reinterpret_cast<uint8_t*>(utf8_package_root), len); |
| + utf8_package_root[len] = '\0'; |
| + } |
| + |
| + return Spawn(isolate, |
| + new IsolateSpawnState(port.Id(), canonical_uri, args, message), |
| + utf8_package_root); |
|
turnidge
2014/09/08 16:40:48
Ditto above, please pass the package root via Isol
Anders Johnsen
2014/09/09 06:45:43
Done.
|
| } |