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(); |