OLD | NEW |
1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2013, 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 // Generate a snapshot file after loading all the scripts specified on the | 5 // Generate a snapshot file after loading all the scripts specified on the |
6 // command line. | 6 // command line. |
7 | 7 |
8 #include <stdlib.h> | 8 #include <stdlib.h> |
9 #include <string.h> | 9 #include <string.h> |
10 #include <stdio.h> | 10 #include <stdio.h> |
(...skipping 238 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
249 | 249 |
250 static Dart_Handle ResolveUriInWorkingDirectory(const char* script_uri) { | 250 static Dart_Handle ResolveUriInWorkingDirectory(const char* script_uri) { |
251 bool failed = false; | 251 bool failed = false; |
252 char* result_string = NULL; | 252 char* result_string = NULL; |
253 | 253 |
254 { | 254 { |
255 UriResolverIsolateScope scope; | 255 UriResolverIsolateScope scope; |
256 | 256 |
257 // Run DartUtils::ResolveUriInWorkingDirectory in context of uri resolver | 257 // Run DartUtils::ResolveUriInWorkingDirectory in context of uri resolver |
258 // isolate. | 258 // isolate. |
259 Dart_Handle builtin_lib = | |
260 Builtin::LoadAndCheckLibrary(Builtin::kBuiltinLibrary); | |
261 CHECK_RESULT(builtin_lib); | |
262 | |
263 Dart_Handle result = DartUtils::ResolveUriInWorkingDirectory( | 259 Dart_Handle result = DartUtils::ResolveUriInWorkingDirectory( |
264 DartUtils::NewString(script_uri), builtin_lib); | 260 DartUtils::NewString(script_uri)); |
265 if (Dart_IsError(result)) { | 261 if (Dart_IsError(result)) { |
266 failed = true; | 262 failed = true; |
267 result_string = strdup(Dart_GetError(result)); | 263 result_string = strdup(Dart_GetError(result)); |
268 } else { | 264 } else { |
269 result_string = strdup(DartUtils::GetStringValue(result)); | 265 result_string = strdup(DartUtils::GetStringValue(result)); |
270 } | 266 } |
271 } | 267 } |
272 | 268 |
273 Dart_Handle result = failed ? Dart_NewApiError(result_string) : | 269 Dart_Handle result = failed ? Dart_NewApiError(result_string) : |
274 DartUtils::NewString(result_string); | 270 DartUtils::NewString(result_string); |
275 free(result_string); | 271 free(result_string); |
276 return result; | 272 return result; |
277 } | 273 } |
278 | 274 |
279 | 275 |
280 static Dart_Handle FilePathFromUri(const char* script_uri) { | 276 static Dart_Handle FilePathFromUri(const char* script_uri) { |
281 bool failed = false; | 277 bool failed = false; |
282 char* result_string = NULL; | 278 char* result_string = NULL; |
283 | 279 |
284 { | 280 { |
285 UriResolverIsolateScope scope; | 281 UriResolverIsolateScope scope; |
286 | 282 |
287 // Run DartUtils::FilePathFromUri in context of uri resolver isolate. | 283 // Run DartUtils::FilePathFromUri in context of uri resolver isolate. |
288 Dart_Handle builtin_lib = | |
289 Builtin::LoadAndCheckLibrary(Builtin::kBuiltinLibrary); | |
290 CHECK_RESULT(builtin_lib); | |
291 | |
292 Dart_Handle result = DartUtils::FilePathFromUri( | 284 Dart_Handle result = DartUtils::FilePathFromUri( |
293 DartUtils::NewString(script_uri), builtin_lib); | 285 DartUtils::NewString(script_uri)); |
294 if (Dart_IsError(result)) { | 286 if (Dart_IsError(result)) { |
295 failed = true; | 287 failed = true; |
296 result_string = strdup(Dart_GetError(result)); | 288 result_string = strdup(Dart_GetError(result)); |
297 } else { | 289 } else { |
298 result_string = strdup(DartUtils::GetStringValue(result)); | 290 result_string = strdup(DartUtils::GetStringValue(result)); |
299 } | 291 } |
300 } | 292 } |
301 | 293 |
302 Dart_Handle result = failed ? Dart_NewApiError(result_string) : | 294 Dart_Handle result = failed ? Dart_NewApiError(result_string) : |
303 DartUtils::NewString(result_string); | 295 DartUtils::NewString(result_string); |
304 free(result_string); | 296 free(result_string); |
305 return result; | 297 return result; |
306 } | 298 } |
307 | 299 |
308 | 300 |
309 static Dart_Handle ResolveUri(const char* library_uri, const char* uri) { | 301 static Dart_Handle ResolveUri(const char* library_uri, const char* uri) { |
310 bool failed = false; | 302 bool failed = false; |
311 char* result_string = NULL; | 303 char* result_string = NULL; |
312 | 304 |
313 { | 305 { |
314 UriResolverIsolateScope scope; | 306 UriResolverIsolateScope scope; |
315 | 307 |
316 // Run DartUtils::ResolveUri in context of uri resolver isolate. | 308 // Run DartUtils::ResolveUri in context of uri resolver isolate. |
317 Dart_Handle builtin_lib = | |
318 Builtin::LoadAndCheckLibrary(Builtin::kBuiltinLibrary); | |
319 CHECK_RESULT(builtin_lib); | |
320 | |
321 Dart_Handle result = DartUtils::ResolveUri( | 309 Dart_Handle result = DartUtils::ResolveUri( |
322 DartUtils::NewString(library_uri), | 310 DartUtils::NewString(library_uri), DartUtils::NewString(uri)); |
323 DartUtils::NewString(uri), | |
324 builtin_lib); | |
325 if (Dart_IsError(result)) { | 311 if (Dart_IsError(result)) { |
326 failed = true; | 312 failed = true; |
327 result_string = strdup(Dart_GetError(result)); | 313 result_string = strdup(Dart_GetError(result)); |
328 } else { | 314 } else { |
329 result_string = strdup(DartUtils::GetStringValue(result)); | 315 result_string = strdup(DartUtils::GetStringValue(result)); |
330 } | 316 } |
331 } | 317 } |
332 | 318 |
333 Dart_Handle result = failed ? Dart_NewApiError(result_string) : | 319 Dart_Handle result = failed ? Dart_NewApiError(result_string) : |
334 DartUtils::NewString(result_string); | 320 DartUtils::NewString(result_string); |
(...skipping 617 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
952 } | 938 } |
953 | 939 |
954 | 940 |
955 static Dart_Isolate CreateServiceIsolate(const char* script_uri, | 941 static Dart_Isolate CreateServiceIsolate(const char* script_uri, |
956 const char* main, | 942 const char* main, |
957 const char* package_root, | 943 const char* package_root, |
958 const char* package_config, | 944 const char* package_config, |
959 Dart_IsolateFlags* flags, | 945 Dart_IsolateFlags* flags, |
960 void* data, | 946 void* data, |
961 char** error) { | 947 char** error) { |
| 948 IsolateData* isolate_data = new IsolateData(script_uri, |
| 949 package_root, |
| 950 package_config); |
962 Dart_Isolate isolate = NULL; | 951 Dart_Isolate isolate = NULL; |
963 isolate = Dart_CreateIsolate(script_uri, | 952 isolate = Dart_CreateIsolate(script_uri, |
964 main, | 953 main, |
965 NULL, | 954 NULL, |
966 NULL, | 955 NULL, |
967 NULL, | 956 isolate_data, |
968 error); | 957 error); |
969 | 958 |
970 if (isolate == NULL) { | 959 if (isolate == NULL) { |
971 Log::PrintErr("Error: Could not create service isolate"); | 960 Log::PrintErr("Error: Could not create service isolate"); |
972 return NULL; | 961 return NULL; |
973 } | 962 } |
974 | 963 |
975 Dart_EnterScope(); | 964 Dart_EnterScope(); |
976 if (!Dart_IsServiceIsolate(isolate)) { | 965 if (!Dart_IsServiceIsolate(isolate)) { |
977 Log::PrintErr("Error: We only expect to create the service isolate"); | 966 Log::PrintErr("Error: We only expect to create the service isolate"); |
(...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1048 DartUtils::WriteFile, | 1037 DartUtils::WriteFile, |
1049 DartUtils::CloseFile, | 1038 DartUtils::CloseFile, |
1050 DartUtils::EntropySource, | 1039 DartUtils::EntropySource, |
1051 NULL); | 1040 NULL); |
1052 if (error != NULL) { | 1041 if (error != NULL) { |
1053 Log::PrintErr("VM initialization failed: %s\n", error); | 1042 Log::PrintErr("VM initialization failed: %s\n", error); |
1054 free(error); | 1043 free(error); |
1055 return 255; | 1044 return 255; |
1056 } | 1045 } |
1057 | 1046 |
| 1047 IsolateData* isolate_data = new IsolateData(NULL, NULL, NULL); |
1058 Dart_Isolate isolate = Dart_CreateIsolate( | 1048 Dart_Isolate isolate = Dart_CreateIsolate( |
1059 NULL, NULL, NULL, NULL, NULL, &error); | 1049 NULL, NULL, NULL, NULL, isolate_data, &error); |
1060 if (isolate == NULL) { | 1050 if (isolate == NULL) { |
1061 Log::PrintErr("Error: %s", error); | 1051 Log::PrintErr("Error: %s", error); |
1062 free(error); | 1052 free(error); |
1063 exit(255); | 1053 exit(255); |
1064 } | 1054 } |
1065 | 1055 |
1066 Dart_Handle result; | 1056 Dart_Handle result; |
1067 Dart_Handle library; | 1057 Dart_Handle library; |
1068 Dart_EnterScope(); | 1058 Dart_EnterScope(); |
1069 | 1059 |
1070 ASSERT(vm_isolate_snapshot_filename != NULL); | 1060 ASSERT(vm_isolate_snapshot_filename != NULL); |
1071 ASSERT(isolate_snapshot_filename != NULL); | 1061 ASSERT(isolate_snapshot_filename != NULL); |
1072 // Load up the script before a snapshot is created. | 1062 // Load up the script before a snapshot is created. |
1073 if (app_script_name != NULL) { | 1063 if (app_script_name != NULL) { |
1074 // This is the case of a custom embedder (e.g: dartium) trying to | 1064 // This is the case of a custom embedder (e.g: dartium) trying to |
1075 // create a full snapshot. The current isolate is set up so that we can | 1065 // create a full snapshot. The current isolate is set up so that we can |
1076 // invoke the dart uri resolution code like _resolveURI. App script is | 1066 // invoke the dart uri resolution code like _resolveURI. App script is |
1077 // loaded into a separate isolate. | 1067 // loaded into a separate isolate. |
1078 | 1068 |
1079 SetupForUriResolution(); | 1069 SetupForUriResolution(); |
1080 | 1070 |
1081 // Get handle to builtin library. | 1071 // Prepare builtin and its dependent libraries for use to resolve URIs. |
1082 Dart_Handle builtin_lib = | 1072 // Set up various closures, e.g: printing, timers etc. |
1083 Builtin::LoadAndCheckLibrary(Builtin::kBuiltinLibrary); | 1073 // Set up 'package root' for URI resolution. |
1084 CHECK_RESULT(builtin_lib); | 1074 result = DartUtils::PrepareForScriptLoading(false, false); |
1085 | |
1086 // Ensure that we mark all libraries as loaded. | |
1087 result = Dart_FinalizeLoading(false); | |
1088 CHECK_RESULT(result); | 1075 CHECK_RESULT(result); |
1089 | 1076 |
1090 // Prepare for script loading by setting up the 'print' and 'timer' | 1077 // Set up the load port provided by the service isolate so that we can |
1091 // closures and setting up 'package root' for URI resolution. | 1078 // load scripts. |
1092 result = | 1079 result = DartUtils::SetupServiceLoadPort(); |
1093 DartUtils::PrepareForScriptLoading(package_root, | |
1094 NULL, | |
1095 false, | |
1096 false, | |
1097 builtin_lib); | |
1098 CHECK_RESULT(result); | 1080 CHECK_RESULT(result); |
| 1081 |
| 1082 // Setup package root if specified. |
| 1083 result = DartUtils::SetupPackageRoot(package_root, NULL); |
| 1084 CHECK_RESULT(result); |
| 1085 |
1099 Dart_ExitScope(); | 1086 Dart_ExitScope(); |
1100 Dart_ExitIsolate(); | 1087 Dart_ExitIsolate(); |
1101 | 1088 |
1102 UriResolverIsolateScope::isolate = isolate; | 1089 UriResolverIsolateScope::isolate = isolate; |
1103 | 1090 |
1104 // Now we create an isolate into which we load all the code that needs to | 1091 // Now we create an isolate into which we load all the code that needs to |
1105 // be in the snapshot. | 1092 // be in the snapshot. |
1106 if (Dart_CreateIsolate(NULL, NULL, NULL, NULL, NULL, &error) == NULL) { | 1093 isolate_data = new IsolateData(NULL, NULL, NULL); |
| 1094 if (Dart_CreateIsolate( |
| 1095 NULL, NULL, NULL, NULL, isolate_data, &error) == NULL) { |
1107 fprintf(stderr, "%s", error); | 1096 fprintf(stderr, "%s", error); |
1108 free(error); | 1097 free(error); |
1109 exit(255); | 1098 exit(255); |
1110 } | 1099 } |
1111 Dart_EnterScope(); | 1100 Dart_EnterScope(); |
1112 | 1101 |
1113 // Set up the library tag handler in such a manner that it will use the | 1102 // Set up the library tag handler in such a manner that it will use the |
1114 // URL mapping specified on the command line to load the libraries. | 1103 // URL mapping specified on the command line to load the libraries. |
1115 result = Dart_SetLibraryTagHandler(CreateSnapshotLibraryTagHandler); | 1104 result = Dart_SetLibraryTagHandler(CreateSnapshotLibraryTagHandler); |
1116 CHECK_RESULT(result); | 1105 CHECK_RESULT(result); |
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1148 EventHandler::Stop(); | 1137 EventHandler::Stop(); |
1149 return 0; | 1138 return 0; |
1150 } | 1139 } |
1151 | 1140 |
1152 } // namespace bin | 1141 } // namespace bin |
1153 } // namespace dart | 1142 } // namespace dart |
1154 | 1143 |
1155 int main(int argc, char** argv) { | 1144 int main(int argc, char** argv) { |
1156 return dart::bin::main(argc, argv); | 1145 return dart::bin::main(argc, argv); |
1157 } | 1146 } |
OLD | NEW |