Write the magic number 0xf5f5dcdc into a script snapshot file and use this to distinguish whether a script snapshot or a regular script file is being passed on the command line (removed the --use-script-snapshot option).
Review URL: https://codereview.chromium.org//12438033

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@20339 260f80e4-7a28-3924-810f-c04153c831b5
diff --git a/runtime/bin/main.cc b/runtime/bin/main.cc
index 6f29afa..988f78a 100644
--- a/runtime/bin/main.cc
+++ b/runtime/bin/main.cc
@@ -29,7 +29,6 @@
 
 
 // Global state that stores a pointer to the application script snapshot.
-static bool use_script_snapshot = false;
 static bool generate_script_snapshot = false;
 static File* snapshot_file = NULL;
 
@@ -154,25 +153,6 @@
 }
 
 
-static bool ProcessUseScriptSnapshotOption(const char* filename) {
-  if (filename != NULL && strlen(filename) != 0) {
-    use_script_snapshot = true;
-    if (generate_script_snapshot) {
-      Log::PrintErr("Incompatible options specified --generate-script-snapshot "
-                    "and --use-script-snapshot\n");
-      return false;
-    }
-    snapshot_file = File::Open(filename, File::kRead);
-    if (snapshot_file == NULL) {
-      Log::PrintErr("Unable to open file %s for reading the snapshot\n",
-                    filename);
-      return false;
-    }
-  }
-  return true;
-}
-
-
 static bool ProcessVmStatsOption(const char* port) {
   ASSERT(port != NULL);
   if (*port == '\0') {
@@ -216,11 +196,6 @@
                     " dart\n");
       return false;
     }
-    if (use_script_snapshot) {
-      Log::PrintErr("Incompatible options specified --use-script-snapshot "
-                    "and --generate-script-snapshot\n");
-      return false;
-    }
     snapshot_file = File::Open(filename, File::kWriteTruncate);
     if (snapshot_file == NULL) {
       Log::PrintErr("Unable to open file %s for writing the snapshot\n",
@@ -249,7 +224,6 @@
   { "--break_at=", ProcessBreakpointOption },
   { "--compile_all", ProcessCompileAllOption },
   { "--debug", ProcessDebugOption },
-  { "--use-script-snapshot=", ProcessUseScriptSnapshotOption },
   { "--generate-script-snapshot=", ProcessGenScriptSnapshotOption },
   { "--stats-root=", ProcessVmStatsRootOption },
   { "--stats", ProcessVmStatsOption },
@@ -476,54 +450,23 @@
   CHECK_RESULT(result);
 
   // Load the specified application script into the newly created isolate.
-  Dart_Handle library;
-  if (use_script_snapshot) {
-    if (snapshot_file == NULL) {
-      use_script_snapshot = false;
-      *error = strdup("Invalid script snapshot file name specified");
-      Dart_ExitScope();
-      Dart_ShutdownIsolate();
-      return false;
-    }
-    size_t len = snapshot_file->Length();
-    uint8_t* buffer = reinterpret_cast<uint8_t*>(malloc(len));
-    if (buffer == NULL) {
-      delete snapshot_file;
-      snapshot_file = NULL;
-      use_script_snapshot = false;
-      *error = strdup("Unable to read contents of script snapshot file");
-      Dart_ExitScope();
-      Dart_ShutdownIsolate();
-      return false;
-    }
-    // Prepare for script loading by setting up the 'print' and 'timer'
-    // closures and setting up 'package root' for URI resolution.
-    Dart_Handle builtin_lib =
-        Builtin::LoadAndCheckLibrary(Builtin::kBuiltinLibrary);
-    DartUtils::PrepareForScriptLoading(package_root, builtin_lib);
 
-    snapshot_file->ReadFully(buffer, len);
-    library = Dart_LoadScriptFromSnapshot(buffer);
-    free(buffer);
-    delete snapshot_file;
-    snapshot_file = NULL;
-    use_script_snapshot = false;  // No further usage of script snapshots.
-  } else {
-    // Prepare builtin and its dependent libraries for use to resolve URIs.
-    Dart_Handle uri_url = DartUtils::NewString(DartUtils::kUriLibURL);
-    Dart_Handle uri_lib = Dart_LookupLibrary(uri_url);
-    CHECK_RESULT(uri_lib);
-    Dart_Handle builtin_lib =
-        Builtin::LoadAndCheckLibrary(Builtin::kBuiltinLibrary);
-    CHECK_RESULT(builtin_lib);
+  // Prepare builtin and its dependent libraries for use to resolve URIs.
+  // The builtin library is part of the core snapshot and would already be
+  // available here in the case of script snapshot loading.
+  Dart_Handle uri_url = DartUtils::NewString(DartUtils::kUriLibURL);
+  Dart_Handle uri_lib = Dart_LookupLibrary(uri_url);
+  CHECK_RESULT(uri_lib);
+  Dart_Handle builtin_lib =
+      Builtin::LoadAndCheckLibrary(Builtin::kBuiltinLibrary);
+  CHECK_RESULT(builtin_lib);
 
-    // Prepare for script loading by setting up the 'print' and 'timer'
-    // closures and setting up 'package root' for URI resolution.
-    result = DartUtils::PrepareForScriptLoading(package_root, builtin_lib);
-    CHECK_RESULT(result);
+  // Prepare for script loading by setting up the 'print' and 'timer'
+  // closures and setting up 'package root' for URI resolution.
+  result = DartUtils::PrepareForScriptLoading(package_root, builtin_lib);
+  CHECK_RESULT(result);
 
-    library = DartUtils::LoadScript(script_uri, builtin_lib);
-  }
+  Dart_Handle library = DartUtils::LoadScript(script_uri, builtin_lib);
   CHECK_RESULT(library);
   if (!Dart_IsLibrary(library)) {
     char errbuf[256];
@@ -825,6 +768,9 @@
       return kErrorExitCode;  // Indicates we encountered an error.
     }
 
+    // Write the magic number to indicate file is a script snapshot.
+    DartUtils::WriteMagicNumber(snapshot_file);
+
     // Now write the snapshot out to specified file.
     bool bytes_written = snapshot_file->WriteFully(buffer, size);
     ASSERT(bytes_written);