| Index: runtime/vm/dart_api_impl.cc
|
| diff --git a/runtime/vm/dart_api_impl.cc b/runtime/vm/dart_api_impl.cc
|
| index 343f5979e5eb58182c2db3e23f8a40b3ce59e176..f50d823ef37839b99a3952f260d7aefa1210b433 100644
|
| --- a/runtime/vm/dart_api_impl.cc
|
| +++ b/runtime/vm/dart_api_impl.cc
|
| @@ -1259,12 +1259,15 @@ static char* BuildIsolateName(const char* script_uri,
|
| }
|
|
|
|
|
| -DART_EXPORT Dart_Isolate Dart_CreateIsolate(const char* script_uri,
|
| - const char* main,
|
| - const uint8_t* snapshot,
|
| - Dart_IsolateFlags* flags,
|
| - void* callback_data,
|
| - char** error) {
|
| +static Dart_Isolate CreateIsolate(const char* script_uri,
|
| + const char* main,
|
| + const uint8_t* snapshot_buffer,
|
| + intptr_t snapshot_length,
|
| + bool from_kernel,
|
| + Dart_IsolateFlags* flags,
|
| + void* callback_data,
|
| + char** error) {
|
| + ASSERT(!from_kernel || (snapshot_buffer != NULL));
|
| CHECK_NO_ISOLATE(Isolate::Current());
|
| char* isolate_name = BuildIsolateName(script_uri, main);
|
|
|
| @@ -1288,14 +1291,15 @@ DART_EXPORT Dart_Isolate Dart_CreateIsolate(const char* script_uri,
|
| // bootstrap library files which call out to a tag handler that may create
|
| // Api Handles when an error is encountered.
|
| Dart_EnterScope();
|
| - const Error& error_obj =
|
| - Error::Handle(Z, Dart::InitializeIsolate(snapshot, callback_data));
|
| + const Error& error_obj = Error::Handle(
|
| + Z, Dart::InitializeIsolate(snapshot_buffer, snapshot_length,
|
| + from_kernel, callback_data));
|
| if (error_obj.IsNull()) {
|
| - #if defined(DART_NO_SNAPSHOT) && !defined(PRODUCT)
|
| - if (FLAG_check_function_fingerprints) {
|
| +#if defined(DART_NO_SNAPSHOT) && !defined(PRODUCT)
|
| + if (FLAG_check_function_fingerprints && !from_kernel) {
|
| Library::CheckFunctionFingerprints();
|
| }
|
| - #endif // defined(DART_NO_SNAPSHOT) && !defined(PRODUCT).
|
| +#endif // defined(DART_NO_SNAPSHOT) && !defined(PRODUCT).
|
| // We exit the API scope entered above.
|
| Dart_ExitScope();
|
| // A Thread structure has been associated to the thread, we do the
|
| @@ -1315,6 +1319,30 @@ DART_EXPORT Dart_Isolate Dart_CreateIsolate(const char* script_uri,
|
| }
|
|
|
|
|
| +DART_EXPORT Dart_Isolate Dart_CreateIsolate(const char* script_uri,
|
| + const char* main,
|
| + const uint8_t* snapshot_buffer,
|
| + Dart_IsolateFlags* flags,
|
| + void* callback_data,
|
| + char** error) {
|
| + return CreateIsolate(script_uri, main, snapshot_buffer, -1, false, flags,
|
| + callback_data, error);
|
| +}
|
| +
|
| +
|
| +DART_EXPORT Dart_Isolate Dart_CreateIsolateFromKernel(
|
| + const char* script_uri,
|
| + const char* main,
|
| + const uint8_t* kernel_file,
|
| + intptr_t kernel_length,
|
| + Dart_IsolateFlags* flags,
|
| + void* callback_data,
|
| + char** error) {
|
| + return CreateIsolate(script_uri, main, kernel_file, kernel_length, true,
|
| + flags, callback_data, error);
|
| +}
|
| +
|
| +
|
| DART_EXPORT void Dart_ShutdownIsolate() {
|
| Thread* T = Thread::Current();
|
| Isolate* I = T->isolate();
|
|
|