OLD | NEW |
1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file |
2 // for details. All rights reserved. Use of this source code is governed by a | 2 // for details. All rights reserved. Use of this source code is governed by a |
3 // BSD-style license that can be found in the LICENSE file. | 3 // BSD-style license that can be found in the LICENSE file. |
4 | 4 |
5 #include <stdio.h> | 5 #include <stdio.h> |
6 #include <stdlib.h> | 6 #include <stdlib.h> |
7 #include <string.h> | 7 #include <string.h> |
8 | 8 |
9 #include "include/dart_api.h" | 9 #include "include/dart_api.h" |
10 #include "include/dart_tools_api.h" | 10 #include "include/dart_tools_api.h" |
(...skipping 804 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
815 exit_code); | 815 exit_code); |
816 Platform::Exit(kErrorExitCode); | 816 Platform::Exit(kErrorExitCode); |
817 } | 817 } |
818 if (exit_code == 0) { | 818 if (exit_code == 0) { |
819 Snapshot::GenerateAppJIT(snapshot_filename); | 819 Snapshot::GenerateAppJIT(snapshot_filename); |
820 } | 820 } |
821 } | 821 } |
822 | 822 |
823 static Dart_Isolate IsolateSetupHelper(Dart_Isolate isolate, | 823 static Dart_Isolate IsolateSetupHelper(Dart_Isolate isolate, |
824 bool is_main_isolate, | 824 bool is_main_isolate, |
825 bool kernel_file_specified, | |
826 const char* script_uri, | 825 const char* script_uri, |
827 const char* package_root, | 826 const char* package_root, |
828 const char* packages_config, | 827 const char* packages_config, |
829 bool set_native_resolvers, | 828 bool set_native_resolvers, |
830 bool isolate_run_app_snapshot, | 829 bool isolate_run_app_snapshot, |
831 char** error, | 830 char** error, |
832 int* exit_code) { | 831 int* exit_code) { |
833 Dart_EnterScope(); | 832 Dart_EnterScope(); |
834 IsolateData* isolate_data = | 833 IsolateData* isolate_data = |
835 reinterpret_cast<IsolateData*>(Dart_IsolateData(isolate)); | 834 reinterpret_cast<IsolateData*>(Dart_IsolateData(isolate)); |
836 void* kernel_program = isolate_data->kernel_program; | 835 void* kernel_program = isolate_data->kernel_program; |
837 | 836 |
838 // Set up the library tag handler for this isolate. | 837 // Set up the library tag handler for this isolate. |
839 Dart_Handle result = Dart_SetLibraryTagHandler(Loader::LibraryTagHandler); | 838 Dart_Handle result = Dart_SetLibraryTagHandler(Loader::LibraryTagHandler); |
840 CHECK_RESULT(result); | 839 CHECK_RESULT(result); |
841 | 840 |
842 // Prepare builtin and other core libraries for use to resolve URIs. | 841 // Prepare builtin and other core libraries for use to resolve URIs. |
843 // Set up various closures, e.g: printing, timers etc. | 842 // Set up various closures, e.g: printing, timers etc. |
844 // Set up 'package root' for URI resolution. | 843 // Set up 'package root' for URI resolution. |
845 result = DartUtils::PrepareForScriptLoading(false, trace_loading); | 844 result = DartUtils::PrepareForScriptLoading(false, trace_loading); |
846 CHECK_RESULT(result); | 845 CHECK_RESULT(result); |
847 | 846 |
848 if (kernel_file_specified) { | 847 #if !defined(DART_PRECOMPILED_RUNTIME) |
| 848 if (dfe.kernel_file_specified()) { |
849 ASSERT(kernel_program != NULL); | 849 ASSERT(kernel_program != NULL); |
850 result = Dart_LoadKernel(kernel_program); | 850 result = Dart_LoadKernel(kernel_program); |
851 } else { | 851 } else { |
852 if (kernel_program != NULL) { | 852 if (kernel_program != NULL) { |
853 Dart_Handle uri = Dart_NewStringFromCString(script_uri); | 853 Dart_Handle uri = Dart_NewStringFromCString(script_uri); |
854 CHECK_RESULT(uri); | 854 CHECK_RESULT(uri); |
855 Dart_Handle resolved_script_uri = DartUtils::ResolveScript(uri); | 855 Dart_Handle resolved_script_uri = DartUtils::ResolveScript(uri); |
856 CHECK_RESULT(resolved_script_uri); | 856 CHECK_RESULT(resolved_script_uri); |
857 result = | 857 result = |
858 Dart_LoadScript(uri, resolved_script_uri, | 858 Dart_LoadScript(uri, resolved_script_uri, |
859 reinterpret_cast<Dart_Handle>(kernel_program), 0, 0); | 859 reinterpret_cast<Dart_Handle>(kernel_program), 0, 0); |
860 CHECK_RESULT(result); | 860 CHECK_RESULT(result); |
861 } | 861 } |
862 } | 862 } |
| 863 #endif // !defined(DART_PRECOMPILED_RUNTIME) |
| 864 |
863 if (set_native_resolvers) { | 865 if (set_native_resolvers) { |
864 // Setup the native resolver as the snapshot does not carry it. | 866 // Setup the native resolver as the snapshot does not carry it. |
865 Builtin::SetNativeResolver(Builtin::kBuiltinLibrary); | 867 Builtin::SetNativeResolver(Builtin::kBuiltinLibrary); |
866 Builtin::SetNativeResolver(Builtin::kIOLibrary); | 868 Builtin::SetNativeResolver(Builtin::kIOLibrary); |
867 } | 869 } |
868 if (isolate_run_app_snapshot) { | 870 if (isolate_run_app_snapshot) { |
869 Dart_Handle result = Loader::ReloadNativeExtensions(); | 871 Dart_Handle result = Loader::ReloadNativeExtensions(); |
870 CHECK_RESULT(result); | 872 CHECK_RESULT(result); |
871 } | 873 } |
872 | 874 |
(...skipping 102 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
975 IsolateData* isolate_data = | 977 IsolateData* isolate_data = |
976 new IsolateData(script_uri, package_root, packages_config, app_snapshot); | 978 new IsolateData(script_uri, package_root, packages_config, app_snapshot); |
977 Dart_Isolate isolate = Dart_CreateIsolate( | 979 Dart_Isolate isolate = Dart_CreateIsolate( |
978 script_uri, main, isolate_snapshot_data, isolate_snapshot_instructions, | 980 script_uri, main, isolate_snapshot_data, isolate_snapshot_instructions, |
979 flags, isolate_data, error); | 981 flags, isolate_data, error); |
980 if (isolate == NULL) { | 982 if (isolate == NULL) { |
981 delete isolate_data; | 983 delete isolate_data; |
982 return NULL; | 984 return NULL; |
983 } | 985 } |
984 | 986 |
985 return IsolateSetupHelper(isolate, false, false, script_uri, package_root, | 987 return IsolateSetupHelper(isolate, false, script_uri, package_root, |
986 packages_config, isolate_snapshot_data, | 988 packages_config, isolate_snapshot_data, |
987 isolate_run_app_snapshot, error, exit_code); | 989 isolate_run_app_snapshot, error, exit_code); |
988 } | 990 } |
989 #endif // !defined(DART_PRECOMPILED_RUNTIME) | 991 #endif // !defined(DART_PRECOMPILED_RUNTIME) |
990 | 992 |
991 // Returns newly created Service Isolate on success, NULL on failure. | 993 // Returns newly created Service Isolate on success, NULL on failure. |
992 // For now we only support the service isolate coming up from sources | 994 // For now we only support the service isolate coming up from sources |
993 // which are compiled by the VM parser. | 995 // which are compiled by the VM parser. |
994 static Dart_Isolate CreateAndSetupServiceIsolate(const char* script_uri, | 996 static Dart_Isolate CreateAndSetupServiceIsolate(const char* script_uri, |
995 const char* main, | 997 const char* main, |
(...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1073 const char* main, | 1075 const char* main, |
1074 const char* package_root, | 1076 const char* package_root, |
1075 const char* packages_config, | 1077 const char* packages_config, |
1076 Dart_IsolateFlags* flags, | 1078 Dart_IsolateFlags* flags, |
1077 char** error, | 1079 char** error, |
1078 int* exit_code) { | 1080 int* exit_code) { |
1079 ASSERT(script_uri != NULL); | 1081 ASSERT(script_uri != NULL); |
1080 void* kernel_platform = NULL; | 1082 void* kernel_platform = NULL; |
1081 void* kernel_program = NULL; | 1083 void* kernel_program = NULL; |
1082 AppSnapshot* app_snapshot = NULL; | 1084 AppSnapshot* app_snapshot = NULL; |
1083 bool kernel_file_specified = false; | |
1084 | 1085 |
1085 IsolateData* isolate_data = | 1086 IsolateData* isolate_data = |
1086 new IsolateData(script_uri, package_root, packages_config, app_snapshot); | 1087 new IsolateData(script_uri, package_root, packages_config, app_snapshot); |
1087 if (is_main_isolate && (snapshot_deps_filename != NULL)) { | 1088 if (is_main_isolate && (snapshot_deps_filename != NULL)) { |
1088 isolate_data->set_dependencies(new MallocGrowableArray<char*>()); | 1089 isolate_data->set_dependencies(new MallocGrowableArray<char*>()); |
1089 } | 1090 } |
1090 | 1091 |
1091 #if defined(DART_PRECOMPILED_RUNTIME) | 1092 #if defined(DART_PRECOMPILED_RUNTIME) |
1092 // AOT: All isolates start from the app snapshot. | 1093 // AOT: All isolates start from the app snapshot. |
1093 bool isolate_run_app_snapshot = true; | 1094 bool isolate_run_app_snapshot = true; |
(...skipping 23 matching lines...) Expand all Loading... |
1117 &ignore_vm_snapshot_data, &ignore_vm_snapshot_instructions, | 1118 &ignore_vm_snapshot_data, &ignore_vm_snapshot_instructions, |
1118 &isolate_snapshot_data, &isolate_snapshot_instructions); | 1119 &isolate_snapshot_data, &isolate_snapshot_instructions); |
1119 } | 1120 } |
1120 } | 1121 } |
1121 if (!isolate_run_app_snapshot) { | 1122 if (!isolate_run_app_snapshot) { |
1122 kernel_platform = dfe.kernel_platform(); | 1123 kernel_platform = dfe.kernel_platform(); |
1123 kernel_program = dfe.ReadScript(script_uri); | 1124 kernel_program = dfe.ReadScript(script_uri); |
1124 if (kernel_program != NULL) { | 1125 if (kernel_program != NULL) { |
1125 // A kernel file was specified on the command line instead of a source | 1126 // A kernel file was specified on the command line instead of a source |
1126 // file. Load that kernel file directly. | 1127 // file. Load that kernel file directly. |
1127 kernel_file_specified = true; | 1128 dfe.set_kernel_file_specified(true); |
1128 } else if (dfe.UseDartFrontend()) { | 1129 } else if (dfe.UseDartFrontend()) { |
1129 kernel_program = dfe.CompileAndReadScript(script_uri, error, exit_code); | 1130 kernel_program = dfe.CompileAndReadScript(script_uri, error, exit_code); |
1130 if (kernel_program == NULL) { | 1131 if (kernel_program == NULL) { |
1131 return NULL; | 1132 return NULL; |
1132 } | 1133 } |
1133 } | 1134 } |
1134 isolate_data->kernel_program = kernel_program; | 1135 isolate_data->kernel_program = kernel_program; |
1135 } | 1136 } |
1136 #endif // !defined(DART_PRECOMPILED_RUNTIME) | 1137 #endif // !defined(DART_PRECOMPILED_RUNTIME) |
1137 | 1138 |
1138 Dart_Isolate isolate = NULL; | 1139 Dart_Isolate isolate = NULL; |
1139 if (kernel_platform != NULL) { | 1140 if (kernel_platform != NULL) { |
1140 isolate = Dart_CreateIsolateFromKernel(script_uri, main, kernel_platform, | 1141 isolate = Dart_CreateIsolateFromKernel(script_uri, main, kernel_platform, |
1141 flags, isolate_data, error); | 1142 flags, isolate_data, error); |
1142 } else if (kernel_program != NULL) { | 1143 } else if (kernel_program != NULL) { |
1143 isolate = Dart_CreateIsolateFromKernel(script_uri, main, kernel_program, | 1144 isolate = Dart_CreateIsolateFromKernel(script_uri, main, kernel_program, |
1144 flags, isolate_data, error); | 1145 flags, isolate_data, error); |
1145 } else { | 1146 } else { |
1146 isolate = Dart_CreateIsolate(script_uri, main, isolate_snapshot_data, | 1147 isolate = Dart_CreateIsolate(script_uri, main, isolate_snapshot_data, |
1147 isolate_snapshot_instructions, flags, | 1148 isolate_snapshot_instructions, flags, |
1148 isolate_data, error); | 1149 isolate_data, error); |
1149 } | 1150 } |
1150 if (isolate == NULL) { | 1151 if (isolate == NULL) { |
1151 delete isolate_data; | 1152 delete isolate_data; |
1152 return NULL; | 1153 return NULL; |
1153 } | 1154 } |
1154 | 1155 |
1155 bool set_native_resolvers = (kernel_program || isolate_snapshot_data); | 1156 bool set_native_resolvers = (kernel_program || isolate_snapshot_data); |
1156 return IsolateSetupHelper(isolate, is_main_isolate, kernel_file_specified, | 1157 return IsolateSetupHelper(isolate, is_main_isolate, script_uri, package_root, |
1157 script_uri, package_root, packages_config, | 1158 packages_config, set_native_resolvers, |
1158 set_native_resolvers, isolate_run_app_snapshot, | 1159 isolate_run_app_snapshot, error, exit_code); |
1159 error, exit_code); | |
1160 } | 1160 } |
1161 | 1161 |
1162 #undef CHECK_RESULT | 1162 #undef CHECK_RESULT |
1163 | 1163 |
1164 static Dart_Isolate CreateIsolateAndSetup(const char* script_uri, | 1164 static Dart_Isolate CreateIsolateAndSetup(const char* script_uri, |
1165 const char* main, | 1165 const char* main, |
1166 const char* package_root, | 1166 const char* package_root, |
1167 const char* package_config, | 1167 const char* package_config, |
1168 Dart_IsolateFlags* flags, | 1168 Dart_IsolateFlags* flags, |
1169 void* data, | 1169 void* data, |
(...skipping 734 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1904 Platform::Exit(Process::GlobalExitCode()); | 1904 Platform::Exit(Process::GlobalExitCode()); |
1905 } | 1905 } |
1906 | 1906 |
1907 } // namespace bin | 1907 } // namespace bin |
1908 } // namespace dart | 1908 } // namespace dart |
1909 | 1909 |
1910 int main(int argc, char** argv) { | 1910 int main(int argc, char** argv) { |
1911 dart::bin::main(argc, argv); | 1911 dart::bin::main(argc, argv); |
1912 UNREACHABLE(); | 1912 UNREACHABLE(); |
1913 } | 1913 } |
OLD | NEW |