| Index: bin/gen_snapshot.cc
|
| ===================================================================
|
| --- bin/gen_snapshot.cc (revision 1955)
|
| +++ bin/gen_snapshot.cc (working copy)
|
| @@ -20,6 +20,13 @@
|
| // if so which file to write the snapshot into.
|
| static const char* snapshot_filename = NULL;
|
|
|
| +
|
| +// Global state which contains a pointer to the script name for which
|
| +// a snapshot needs to be created (NULL would result in the creation
|
| +// of a generic snapshot that contains only the corelibs).
|
| +static char* app_script_name = NULL;
|
| +
|
| +
|
| // Global state that captures the URL mappings specified on the command line.
|
| static CommandLineOptions* url_mapping = NULL;
|
|
|
| @@ -172,31 +179,69 @@
|
|
|
|
|
| static Dart_Handle LoadGenericSnapshotCreationScript() {
|
| - Dart_Handle source = Builtin_Source();
|
| + Dart_Handle source = Builtin::Source();
|
| if (Dart_IsError(source)) {
|
| return source; // source contains the error string.
|
| }
|
| Dart_Handle url = Dart_NewString(DartUtils::kBuiltinLibURL);
|
| Dart_Handle lib = Dart_LoadScript(url, source, BuiltinLibraryTagHandler);
|
| if (!Dart_IsError(lib)) {
|
| - Builtin_SetupLibrary(lib);
|
| + Builtin::SetupLibrary(lib);
|
| }
|
| return lib;
|
| }
|
|
|
|
|
| -static void* SnapshotCreateCallback(void* data) {
|
| - const char* script_name = reinterpret_cast<const char*>(data);
|
| +static void PrintUsage() {
|
| + fprintf(stderr,
|
| + "dart [<vm-flags>] "
|
| + "[<dart-script-file>]\n");
|
| +}
|
| +
|
| +
|
| +int main(int argc, char** argv) {
|
| + CommandLineOptions vm_options(argc);
|
| +
|
| + // Initialize the URL mapping array.
|
| + CommandLineOptions url_mapping_array(argc);
|
| + url_mapping = &url_mapping_array;
|
| +
|
| + // Parse command line arguments.
|
| + if (ParseArguments(argc,
|
| + argv,
|
| + &vm_options,
|
| + &app_script_name) < 0) {
|
| + PrintUsage();
|
| + return 255;
|
| + }
|
| +
|
| + if (snapshot_filename == NULL) {
|
| + fprintf(stderr, "No snapshot output file specified\n");
|
| + return 255;
|
| + }
|
| +
|
| + // Initialize the Dart VM.
|
| + // Note: We don't expect isolates to be created from dart code during
|
| + // snapshot generation.
|
| + Dart_Initialize(vm_options.count(), vm_options.arguments(), NULL);
|
| +
|
| + char* error;
|
| + Dart_Isolate isolate = Dart_CreateIsolate(NULL, NULL, &error);
|
| + if (isolate == NULL) {
|
| + fprintf(stderr, "%s", error);
|
| + free(error);
|
| + exit(255);
|
| + }
|
| +
|
| Dart_Handle result;
|
| Dart_Handle library;
|
| Dart_EnterScope();
|
|
|
| ASSERT(snapshot_filename != NULL);
|
| -
|
| // Load up the script before a snapshot is created.
|
| - if (script_name != NULL) {
|
| + if (app_script_name != NULL) {
|
| // Load the specified script.
|
| - library = LoadSnapshotCreationScript(script_name);
|
| + library = LoadSnapshotCreationScript(app_script_name);
|
| } else {
|
| // This is a generic dart snapshot which needs builtin library setup.
|
| library = LoadGenericSnapshotCreationScript();
|
| @@ -205,6 +250,7 @@
|
| const char* err_msg = Dart_GetError(library);
|
| fprintf(stderr, "Errors encountered while loading script: %s\n", err_msg);
|
| Dart_ExitScope();
|
| + Dart_ShutdownIsolate();
|
| exit(255);
|
| }
|
| ASSERT(Dart_IsLibrary(library));
|
| @@ -216,58 +262,13 @@
|
| const char* err_msg = Dart_GetError(result);
|
| fprintf(stderr, "Error while creating snapshot: %s\n", err_msg);
|
| Dart_ExitScope();
|
| + Dart_ShutdownIsolate();
|
| exit(255);
|
| }
|
| // Now write the snapshot out to specified file and exit.
|
| WriteSnapshotFile(buffer, size);
|
| Dart_ExitScope();
|
| - return data;
|
| -}
|
|
|
| -
|
| -static void PrintUsage() {
|
| - fprintf(stderr,
|
| - "dart [<vm-flags>] "
|
| - "[<dart-script-file>]\n");
|
| -}
|
| -
|
| -
|
| -int main(int argc, char** argv) {
|
| - CommandLineOptions vm_options(argc);
|
| - char* script_name;
|
| -
|
| - // Initialize the URL mapping array.
|
| - CommandLineOptions url_mapping_array(argc);
|
| - url_mapping = &url_mapping_array;
|
| -
|
| - // Parse command line arguments.
|
| - if (ParseArguments(argc,
|
| - argv,
|
| - &vm_options,
|
| - &script_name) < 0) {
|
| - PrintUsage();
|
| - return 255;
|
| - }
|
| -
|
| - if (snapshot_filename == NULL) {
|
| - fprintf(stderr, "No snapshot output file specified\n");
|
| - return 255;
|
| - }
|
| -
|
| - // Initialize the Dart VM (TODO(asiva) - remove const_cast once
|
| - // dart API is fixed to take a const char** in Dart_Initialize).
|
| - Dart_Initialize(vm_options.count(),
|
| - vm_options.arguments(),
|
| - SnapshotCreateCallback);
|
| -
|
| - // Create an isolate. As a side effect, SnapshotCreateCallback
|
| - // gets called, which loads the script (if one is specified), its libraries
|
| - // and writes out a snapshot.
|
| - Dart_Isolate isolate = Dart_CreateIsolate(NULL, script_name);
|
| - if (isolate == NULL) {
|
| - return 255;
|
| - }
|
| -
|
| // Shutdown the isolate.
|
| Dart_ShutdownIsolate();
|
| return 0;
|
|
|