Index: runtime/vm/dart_api_impl.cc |
diff --git a/runtime/vm/dart_api_impl.cc b/runtime/vm/dart_api_impl.cc |
index ab5d16f919665d6c44817b18ae2ff7df971d84a6..faef85162df7a347e2b7d54edcf274df1cda84f7 100644 |
--- a/runtime/vm/dart_api_impl.cc |
+++ b/runtime/vm/dart_api_impl.cc |
@@ -1241,12 +1241,15 @@ static char* BuildIsolateName(const char* script_uri, const char* main) { |
} |
-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); |
@@ -1270,11 +1273,12 @@ 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 (FLAG_check_function_fingerprints && !from_kernel) { |
Library::CheckFunctionFingerprints(); |
} |
#endif // defined(DART_NO_SNAPSHOT) && !defined(PRODUCT). |
@@ -1297,6 +1301,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(); |
@@ -5332,7 +5360,7 @@ DART_EXPORT Dart_Handle Dart_LoadKernel(const uint8_t* buffer, |
DARTSCOPE(Thread::Current()); |
StackZone zone(T); |
-#if defined(DART_PRECOMPILED_RUNTIME) && !defined(DART_PRECOMPILER) |
+#if defined(DART_PRECOMPILED_RUNTIME) |
return Api::NewError("%s: Can't load Kernel files from precompiled runtime.", |
CURRENT_FUNC); |
#else |