Chromium Code Reviews| Index: runtime/lib/isolate.cc |
| diff --git a/runtime/lib/isolate.cc b/runtime/lib/isolate.cc |
| index 378e6eb18574a7f200984709e20618d9726849d1..5199f1983f23d3ffe98db36accc3e223cfa5f3c1 100644 |
| --- a/runtime/lib/isolate.cc |
| +++ b/runtime/lib/isolate.cc |
| @@ -217,11 +217,15 @@ static void Spawn(Isolate* parent_isolate, IsolateSpawnState* state) { |
| } |
| -DEFINE_NATIVE_ENTRY(Isolate_spawnFunction, 4) { |
| +DEFINE_NATIVE_ENTRY(Isolate_spawnFunction, 7) { |
| GET_NON_NULL_NATIVE_ARGUMENT(SendPort, port, arguments->NativeArgAt(0)); |
| GET_NON_NULL_NATIVE_ARGUMENT(Instance, closure, arguments->NativeArgAt(1)); |
| GET_NON_NULL_NATIVE_ARGUMENT(Instance, message, arguments->NativeArgAt(2)); |
| GET_NON_NULL_NATIVE_ARGUMENT(Bool, paused, arguments->NativeArgAt(3)); |
| + GET_NATIVE_ARGUMENT(Bool, fatalErrors, arguments->NativeArgAt(4)); |
| + GET_NATIVE_ARGUMENT(SendPort, onExit, arguments->NativeArgAt(5)); |
| + GET_NATIVE_ARGUMENT(SendPort, onError, arguments->NativeArgAt(6)); |
| + |
| if (closure.IsClosure()) { |
| Function& func = Function::Handle(); |
| func = Closure::function(closure); |
| @@ -233,10 +237,18 @@ DEFINE_NATIVE_ENTRY(Isolate_spawnFunction, 4) { |
| #endif |
| // Get the parent function so that we get the right function name. |
| func = func.parent_function(); |
| + |
| + bool fatal_errors = fatalErrors.IsNull() ? true : fatalErrors.value(); |
|
floitsch
2015/07/20 13:03:49
I believe the default for the browser is 'false'.
Ivan Posva
2015/07/20 14:28:32
On the VM regardless of embedder the previous non-
|
| + Dart_Port on_exit_port = onExit.IsNull() ? ILLEGAL_PORT : onExit.Id(); |
| + Dart_Port on_error_port = onError.IsNull() ? ILLEGAL_PORT : onError.Id(); |
| + |
| Spawn(isolate, new IsolateSpawnState(port.Id(), |
| func, |
| message, |
| - paused.value())); |
| + paused.value(), |
| + fatal_errors, |
| + on_exit_port, |
| + on_error_port)); |
| return Object::null(); |
| } |
| } |
| @@ -247,7 +259,7 @@ DEFINE_NATIVE_ENTRY(Isolate_spawnFunction, 4) { |
| } |
| -DEFINE_NATIVE_ENTRY(Isolate_spawnUri, 7) { |
| +DEFINE_NATIVE_ENTRY(Isolate_spawnUri, 10) { |
| 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)); |
| @@ -255,6 +267,9 @@ DEFINE_NATIVE_ENTRY(Isolate_spawnUri, 7) { |
| GET_NON_NULL_NATIVE_ARGUMENT(Bool, paused, arguments->NativeArgAt(4)); |
| GET_NATIVE_ARGUMENT(Bool, checked, arguments->NativeArgAt(5)); |
| GET_NATIVE_ARGUMENT(String, package_root, arguments->NativeArgAt(6)); |
| + GET_NATIVE_ARGUMENT(Bool, fatalErrors, arguments->NativeArgAt(7)); |
| + GET_NATIVE_ARGUMENT(SendPort, onExit, arguments->NativeArgAt(8)); |
| + GET_NATIVE_ARGUMENT(SendPort, onError, arguments->NativeArgAt(9)); |
| // Canonicalize the uri with respect to the current isolate. |
| char* error = NULL; |
| @@ -275,12 +290,19 @@ DEFINE_NATIVE_ENTRY(Isolate_spawnUri, 7) { |
| utf8_package_root[len] = '\0'; |
| } |
| + bool fatal_errors = fatalErrors.IsNull() ? true : fatalErrors.value(); |
|
floitsch
2015/07/20 13:03:49
ditto.
|
| + Dart_Port on_exit_port = onExit.IsNull() ? ILLEGAL_PORT : onExit.Id(); |
| + Dart_Port on_error_port = onError.IsNull() ? ILLEGAL_PORT : onError.Id(); |
| + |
| IsolateSpawnState* state = new IsolateSpawnState(port.Id(), |
| canonical_uri, |
| utf8_package_root, |
| args, |
| message, |
| - paused.value()); |
| + paused.value(), |
| + fatal_errors, |
| + on_exit_port, |
| + on_error_port); |
| // If we were passed a value then override the default flags state for |
| // checked mode. |
| if (!checked.IsNull()) { |