| 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 // 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 159 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 170 if (DartUtils::IsDartSchemeURL(url_string)) { | 170 if (DartUtils::IsDartSchemeURL(url_string)) { |
| 171 if (tag == kCanonicalizeUrl) { | 171 if (tag == kCanonicalizeUrl) { |
| 172 return url; | 172 return url; |
| 173 } | 173 } |
| 174 return Dart_Error("unsupported url encountered %s", url_string); | 174 return Dart_Error("unsupported url encountered %s", url_string); |
| 175 } | 175 } |
| 176 return Dart_Error("unexpected tag encountered %d", tag); | 176 return Dart_Error("unexpected tag encountered %d", tag); |
| 177 } | 177 } |
| 178 | 178 |
| 179 | 179 |
| 180 static Dart_Handle LoadGenericSnapshotCreationScript() { | 180 static Dart_Handle LoadGenericSnapshotCreationScript( |
| 181 Dart_Handle source = Builtin::Source(); | 181 Builtin::BuiltinLibraryId id) { |
| 182 Dart_Handle source = Builtin::Source(id); |
| 182 if (Dart_IsError(source)) { | 183 if (Dart_IsError(source)) { |
| 183 return source; // source contains the error string. | 184 return source; // source contains the error string. |
| 184 } | 185 } |
| 185 Dart_Handle url = Dart_NewString(DartUtils::kBuiltinLibURL); | 186 Dart_Handle lib; |
| 186 Dart_Handle lib = Dart_LoadScript(url, source, BuiltinLibraryTagHandler); | 187 if (id == Builtin::kBuiltinLibrary) { |
| 188 // Load the dart:builtin library as the script. |
| 189 Dart_Handle url = Dart_NewString(DartUtils::kBuiltinLibURL); |
| 190 lib = Dart_LoadScript(url, source, BuiltinLibraryTagHandler); |
| 191 } else { |
| 192 ASSERT(id == Builtin::kIOLibrary); |
| 193 // Load the dart:io library to make it available in the snapshot |
| 194 // for importing. |
| 195 lib = Builtin::LoadLibrary(Builtin::kIOLibrary); |
| 196 } |
| 187 if (!Dart_IsError(lib)) { | 197 if (!Dart_IsError(lib)) { |
| 188 Builtin::SetupLibrary(lib); | 198 Builtin::SetupLibrary(lib, id); |
| 189 } | 199 } |
| 190 return lib; | 200 return lib; |
| 191 } | 201 } |
| 192 | 202 |
| 193 | 203 |
| 194 static void PrintUsage() { | 204 static void PrintUsage() { |
| 195 fprintf(stderr, | 205 fprintf(stderr, |
| 196 "dart [<vm-flags>] " | 206 "dart [<vm-flags>] " |
| 197 "[<dart-script-file>]\n"); | 207 "[<dart-script-file>]\n"); |
| 198 } | 208 } |
| 199 | 209 |
| 200 | 210 |
| 211 static void VerifyLoaded(Dart_Handle library) { |
| 212 if (Dart_IsError(library)) { |
| 213 const char* err_msg = Dart_GetError(library); |
| 214 fprintf(stderr, "Errors encountered while loading: %s\n", err_msg); |
| 215 Dart_ExitScope(); |
| 216 Dart_ShutdownIsolate(); |
| 217 exit(255); |
| 218 } |
| 219 ASSERT(Dart_IsLibrary(library)); |
| 220 } |
| 221 |
| 222 |
| 201 int main(int argc, char** argv) { | 223 int main(int argc, char** argv) { |
| 202 CommandLineOptions vm_options(argc); | 224 CommandLineOptions vm_options(argc); |
| 203 | 225 |
| 204 // Initialize the URL mapping array. | 226 // Initialize the URL mapping array. |
| 205 CommandLineOptions url_mapping_array(argc); | 227 CommandLineOptions url_mapping_array(argc); |
| 206 url_mapping = &url_mapping_array; | 228 url_mapping = &url_mapping_array; |
| 207 | 229 |
| 208 // Parse command line arguments. | 230 // Parse command line arguments. |
| 209 if (ParseArguments(argc, | 231 if (ParseArguments(argc, |
| 210 argv, | 232 argv, |
| (...skipping 25 matching lines...) Expand all Loading... |
| 236 | 258 |
| 237 Dart_Handle result; | 259 Dart_Handle result; |
| 238 Dart_Handle library; | 260 Dart_Handle library; |
| 239 Dart_EnterScope(); | 261 Dart_EnterScope(); |
| 240 | 262 |
| 241 ASSERT(snapshot_filename != NULL); | 263 ASSERT(snapshot_filename != NULL); |
| 242 // Load up the script before a snapshot is created. | 264 // Load up the script before a snapshot is created. |
| 243 if (app_script_name != NULL) { | 265 if (app_script_name != NULL) { |
| 244 // Load the specified script. | 266 // Load the specified script. |
| 245 library = LoadSnapshotCreationScript(app_script_name); | 267 library = LoadSnapshotCreationScript(app_script_name); |
| 268 VerifyLoaded(library); |
| 246 } else { | 269 } else { |
| 247 // This is a generic dart snapshot which needs builtin library setup. | 270 // This is a generic dart snapshot which needs builtin library setup. |
| 248 library = LoadGenericSnapshotCreationScript(); | 271 library = LoadGenericSnapshotCreationScript(Builtin::kBuiltinLibrary); |
| 272 VerifyLoaded(library); |
| 273 library = LoadGenericSnapshotCreationScript(Builtin::kIOLibrary); |
| 274 VerifyLoaded(library); |
| 249 } | 275 } |
| 250 if (Dart_IsError(library)) { | 276 |
| 251 const char* err_msg = Dart_GetError(library); | |
| 252 fprintf(stderr, "Errors encountered while loading script: %s\n", err_msg); | |
| 253 Dart_ExitScope(); | |
| 254 Dart_ShutdownIsolate(); | |
| 255 exit(255); | |
| 256 } | |
| 257 ASSERT(Dart_IsLibrary(library)); | |
| 258 uint8_t* buffer = NULL; | 277 uint8_t* buffer = NULL; |
| 259 intptr_t size = 0; | 278 intptr_t size = 0; |
| 260 // First create the snapshot. | 279 // First create the snapshot. |
| 261 result = Dart_CreateSnapshot(&buffer, &size); | 280 result = Dart_CreateSnapshot(&buffer, &size); |
| 262 if (Dart_IsError(result)) { | 281 if (Dart_IsError(result)) { |
| 263 const char* err_msg = Dart_GetError(result); | 282 const char* err_msg = Dart_GetError(result); |
| 264 fprintf(stderr, "Error while creating snapshot: %s\n", err_msg); | 283 fprintf(stderr, "Error while creating snapshot: %s\n", err_msg); |
| 265 Dart_ExitScope(); | 284 Dart_ExitScope(); |
| 266 Dart_ShutdownIsolate(); | 285 Dart_ShutdownIsolate(); |
| 267 exit(255); | 286 exit(255); |
| 268 } | 287 } |
| 269 // Now write the snapshot out to specified file and exit. | 288 // Now write the snapshot out to specified file and exit. |
| 270 WriteSnapshotFile(buffer, size); | 289 WriteSnapshotFile(buffer, size); |
| 271 Dart_ExitScope(); | 290 Dart_ExitScope(); |
| 272 | 291 |
| 273 // Shutdown the isolate. | 292 // Shutdown the isolate. |
| 274 Dart_ShutdownIsolate(); | 293 Dart_ShutdownIsolate(); |
| 275 return 0; | 294 return 0; |
| 276 } | 295 } |
| OLD | NEW |