Index: runtime/bin/main.cc |
diff --git a/runtime/bin/main.cc b/runtime/bin/main.cc |
index 4037874fec6826d772dda68c8cd320f5954a0112..71e338cc302592c2dcdf875f014fb5b40ac24a02 100644 |
--- a/runtime/bin/main.cc |
+++ b/runtime/bin/main.cc |
@@ -822,6 +822,7 @@ static void SnapshotOnExitHook(int64_t exit_code) { |
static Dart_Isolate IsolateSetupHelper(Dart_Isolate isolate, |
bool is_main_isolate, |
+ bool kernel_file_specified, |
const char* script_uri, |
const char* package_root, |
const char* packages_config, |
@@ -844,15 +845,20 @@ static Dart_Isolate IsolateSetupHelper(Dart_Isolate isolate, |
result = DartUtils::PrepareForScriptLoading(false, trace_loading); |
CHECK_RESULT(result); |
- if (kernel_program != NULL) { |
- Dart_Handle uri = Dart_NewStringFromCString(script_uri); |
- CHECK_RESULT(uri); |
- Dart_Handle resolved_script_uri = DartUtils::ResolveScript(uri); |
- CHECK_RESULT(resolved_script_uri); |
- result = |
- Dart_LoadScript(uri, resolved_script_uri, |
- reinterpret_cast<Dart_Handle>(kernel_program), 0, 0); |
- CHECK_RESULT(result); |
+ if (kernel_file_specified) { |
+ ASSERT(kernel_program != NULL); |
+ result = Dart_LoadKernel(kernel_program); |
+ } else { |
+ if (kernel_program != NULL) { |
+ Dart_Handle uri = Dart_NewStringFromCString(script_uri); |
+ CHECK_RESULT(uri); |
+ Dart_Handle resolved_script_uri = DartUtils::ResolveScript(uri); |
+ CHECK_RESULT(resolved_script_uri); |
+ result = |
+ Dart_LoadScript(uri, resolved_script_uri, |
+ reinterpret_cast<Dart_Handle>(kernel_program), 0, 0); |
+ CHECK_RESULT(result); |
+ } |
} |
if (set_native_resolvers) { |
// Setup the native resolver as the snapshot does not carry it. |
@@ -976,7 +982,7 @@ static Dart_Isolate CreateAndSetupKernelIsolate(const char* main, |
return NULL; |
} |
- return IsolateSetupHelper(isolate, false, script_uri, package_root, |
+ return IsolateSetupHelper(isolate, false, false, script_uri, package_root, |
packages_config, isolate_snapshot_data, |
isolate_run_app_snapshot, error, exit_code); |
} |
@@ -1074,6 +1080,7 @@ static Dart_Isolate CreateIsolateAndSetupHelper(bool is_main_isolate, |
void* kernel_platform = NULL; |
void* kernel_program = NULL; |
AppSnapshot* app_snapshot = NULL; |
+ bool kernel_file_specified = false; |
IsolateData* isolate_data = |
new IsolateData(script_uri, package_root, packages_config, app_snapshot); |
@@ -1114,7 +1121,11 @@ static Dart_Isolate CreateIsolateAndSetupHelper(bool is_main_isolate, |
if (!isolate_run_app_snapshot) { |
kernel_platform = dfe.kernel_platform(); |
kernel_program = dfe.ReadScript(script_uri); |
- if (kernel_program == NULL && dfe.UseDartFrontend()) { |
+ if (kernel_program != NULL) { |
+ // A kernel file was specified on the command line instead of a source |
+ // file. Load that kernel file directly. |
+ kernel_file_specified = true; |
+ } else if (dfe.UseDartFrontend()) { |
kernel_program = dfe.CompileAndReadScript(script_uri, error, exit_code); |
if (kernel_program == NULL) { |
return NULL; |
@@ -1142,9 +1153,10 @@ static Dart_Isolate CreateIsolateAndSetupHelper(bool is_main_isolate, |
} |
bool set_native_resolvers = (kernel_program || isolate_snapshot_data); |
- return IsolateSetupHelper(isolate, is_main_isolate, script_uri, package_root, |
- packages_config, set_native_resolvers, |
- isolate_run_app_snapshot, error, exit_code); |
+ return IsolateSetupHelper(isolate, is_main_isolate, kernel_file_specified, |
+ script_uri, package_root, packages_config, |
+ set_native_resolvers, isolate_run_app_snapshot, |
+ error, exit_code); |
} |
#undef CHECK_RESULT |