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 73 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1051 DartUtils::WriteFile, | 1040 DartUtils::WriteFile, |
1052 DartUtils::CloseFile, | 1041 DartUtils::CloseFile, |
1053 DartUtils::EntropySource, | 1042 DartUtils::EntropySource, |
1054 NULL); | 1043 NULL); |
1055 if (error != NULL) { | 1044 if (error != NULL) { |
1056 Log::PrintErr("VM initialization failed: %s\n", error); | 1045 Log::PrintErr("VM initialization failed: %s\n", error); |
1057 free(error); | 1046 free(error); |
1058 return 255; | 1047 return 255; |
1059 } | 1048 } |
1060 | 1049 |
| 1050 IsolateData* isolate_data = new IsolateData(NULL, NULL, NULL); |
1061 Dart_Isolate isolate = Dart_CreateIsolate( | 1051 Dart_Isolate isolate = Dart_CreateIsolate( |
1062 NULL, NULL, NULL, NULL, NULL, &error); | 1052 NULL, NULL, NULL, NULL, isolate_data, &error); |
1063 if (isolate == NULL) { | 1053 if (isolate == NULL) { |
1064 Log::PrintErr("Error: %s", error); | 1054 Log::PrintErr("Error: %s", error); |
1065 free(error); | 1055 free(error); |
1066 exit(255); | 1056 exit(255); |
1067 } | 1057 } |
1068 | 1058 |
1069 Dart_Handle result; | 1059 Dart_Handle result; |
1070 Dart_Handle library; | 1060 Dart_Handle library; |
1071 Dart_EnterScope(); | 1061 Dart_EnterScope(); |
1072 | 1062 |
1073 ASSERT(vm_isolate_snapshot_filename != NULL); | 1063 ASSERT(vm_isolate_snapshot_filename != NULL); |
1074 ASSERT(isolate_snapshot_filename != NULL); | 1064 ASSERT(isolate_snapshot_filename != NULL); |
1075 // Load up the script before a snapshot is created. | 1065 // Load up the script before a snapshot is created. |
1076 if (app_script_name != NULL) { | 1066 if (app_script_name != NULL) { |
1077 // This is the case of a custom embedder (e.g: dartium) trying to | 1067 // This is the case of a custom embedder (e.g: dartium) trying to |
1078 // create a full snapshot. The current isolate is set up so that we can | 1068 // create a full snapshot. The current isolate is set up so that we can |
1079 // invoke the dart uri resolution code like _resolveURI. App script is | 1069 // invoke the dart uri resolution code like _resolveURI. App script is |
1080 // loaded into a separate isolate. | 1070 // loaded into a separate isolate. |
1081 | 1071 |
1082 SetupForUriResolution(); | 1072 SetupForUriResolution(); |
1083 | 1073 |
1084 // Get handle to builtin library. | 1074 // Prepare builtin and its dependent libraries for use to resolve URIs. |
1085 Dart_Handle builtin_lib = | 1075 // Set up various closures, e.g: printing, timers etc. |
1086 Builtin::LoadAndCheckLibrary(Builtin::kBuiltinLibrary); | 1076 // Set up 'package root' for URI resolution. |
1087 CHECK_RESULT(builtin_lib); | 1077 result = DartUtils::PrepareForScriptLoading(false, false); |
1088 | |
1089 // Ensure that we mark all libraries as loaded. | |
1090 result = Dart_FinalizeLoading(false); | |
1091 CHECK_RESULT(result); | 1078 CHECK_RESULT(result); |
1092 | 1079 |
1093 // Prepare for script loading by setting up the 'print' and 'timer' | 1080 // Set up the load port provided by the service isolate so that we can |
1094 // closures and setting up 'package root' for URI resolution. | 1081 // load scripts. |
1095 result = | 1082 result = DartUtils::SetupServiceLoadPort(); |
1096 DartUtils::PrepareForScriptLoading(package_root, | |
1097 NULL, | |
1098 false, | |
1099 false, | |
1100 builtin_lib); | |
1101 CHECK_RESULT(result); | 1083 CHECK_RESULT(result); |
| 1084 |
| 1085 // Setup package root if specified. |
| 1086 result = DartUtils::SetupPackageRoot(package_root, NULL); |
| 1087 CHECK_RESULT(result); |
| 1088 |
1102 Dart_ExitScope(); | 1089 Dart_ExitScope(); |
1103 Dart_ExitIsolate(); | 1090 Dart_ExitIsolate(); |
1104 | 1091 |
1105 UriResolverIsolateScope::isolate = isolate; | 1092 UriResolverIsolateScope::isolate = isolate; |
1106 | 1093 |
1107 // Now we create an isolate into which we load all the code that needs to | 1094 // Now we create an isolate into which we load all the code that needs to |
1108 // be in the snapshot. | 1095 // be in the snapshot. |
1109 if (Dart_CreateIsolate(NULL, NULL, NULL, NULL, NULL, &error) == NULL) { | 1096 isolate_data = new IsolateData(NULL, NULL, NULL); |
| 1097 if (Dart_CreateIsolate( |
| 1098 NULL, NULL, NULL, NULL, isolate_data, &error) == NULL) { |
1110 fprintf(stderr, "%s", error); | 1099 fprintf(stderr, "%s", error); |
1111 free(error); | 1100 free(error); |
1112 exit(255); | 1101 exit(255); |
1113 } | 1102 } |
1114 Dart_EnterScope(); | 1103 Dart_EnterScope(); |
1115 | 1104 |
1116 // Set up the library tag handler in such a manner that it will use the | 1105 // Set up the library tag handler in such a manner that it will use the |
1117 // URL mapping specified on the command line to load the libraries. | 1106 // URL mapping specified on the command line to load the libraries. |
1118 result = Dart_SetLibraryTagHandler(CreateSnapshotLibraryTagHandler); | 1107 result = Dart_SetLibraryTagHandler(CreateSnapshotLibraryTagHandler); |
1119 CHECK_RESULT(result); | 1108 CHECK_RESULT(result); |
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1151 EventHandler::Stop(); | 1140 EventHandler::Stop(); |
1152 return 0; | 1141 return 0; |
1153 } | 1142 } |
1154 | 1143 |
1155 } // namespace bin | 1144 } // namespace bin |
1156 } // namespace dart | 1145 } // namespace dart |
1157 | 1146 |
1158 int main(int argc, char** argv) { | 1147 int main(int argc, char** argv) { |
1159 return dart::bin::main(argc, argv); | 1148 return dart::bin::main(argc, argv); |
1160 } | 1149 } |
OLD | NEW |