| Index: runtime/bin/main.cc | 
| diff --git a/runtime/bin/main.cc b/runtime/bin/main.cc | 
| index 5b14dff3ec5c9961d3168e07df1ce9a89931f701..66647ebea30da35110f55c9049e9bde111bf32bc 100644 | 
| --- a/runtime/bin/main.cc | 
| +++ b/runtime/bin/main.cc | 
| @@ -65,6 +65,12 @@ static const char* commandline_package_root = NULL; | 
| // dart functions and not run anything. | 
| static bool has_compile_all = false; | 
|  | 
| + | 
| +// Global flag that is used to indicate that we want to compile all the | 
| +// dart functions before running main and not compile anything thereafter. | 
| +static bool has_precompile = false; | 
| + | 
| + | 
| // Global flag that is used to indicate that we want to trace resolution of | 
| // URIs and the loading of libraries, parts and scripts. | 
| static bool has_trace_loading = false; | 
| @@ -266,6 +272,19 @@ static bool ProcessCompileAllOption(const char* arg, | 
| return true; | 
| } | 
|  | 
| + | 
| +static bool ProcessPrecompileOption(const char* arg, | 
| +                                    CommandLineOptions* vm_options) { | 
| +  ASSERT(arg != NULL); | 
| +  if (*arg != '\0') { | 
| +    return false; | 
| +  } | 
| +  has_precompile = true; | 
| +  vm_options->AddArgument("--precompile"); | 
| +  return true; | 
| +} | 
| + | 
| + | 
| static bool ProcessDebugOption(const char* option_value, | 
| CommandLineOptions* vm_options) { | 
| ASSERT(option_value != NULL); | 
| @@ -375,6 +394,7 @@ static struct { | 
| // VM specific options to the standalone dart program. | 
| { "--break-at=", ProcessBreakpointOption }, | 
| { "--compile_all", ProcessCompileAllOption }, | 
| +  { "--precompile", ProcessPrecompileOption }, | 
| { "--debug", ProcessDebugOption }, | 
| { "--snapshot=", ProcessGenScriptSnapshotOption }, | 
| { "--enable-vm-service", ProcessEnableVmServiceOption }, | 
| @@ -597,7 +617,10 @@ static Dart_Isolate CreateIsolateAndSetupHelper(const char* script_uri, | 
| *error = strdup(VmService::GetErrorMessage()); | 
| return NULL; | 
| } | 
| -    if (has_compile_all) { | 
| +    if (has_precompile) { | 
| +      result = Dart_Precompile(); | 
| +      CHECK_RESULT(result); | 
| +    } else if (has_compile_all) { | 
| result = Dart_CompileAll(); | 
| CHECK_RESULT(result); | 
| } | 
| @@ -1041,7 +1064,10 @@ void main(int argc, char** argv) { | 
| ASSERT(!Dart_IsError(builtin_lib)); | 
| result = Dart_LibraryImportLibrary(builtin_lib, root_lib, Dart_Null()); | 
|  | 
| -    if (has_compile_all) { | 
| +    if (has_precompile) { | 
| +      result = Dart_Precompile(); | 
| +      DartExitOnError(result); | 
| +    } else if (has_compile_all) { | 
| result = Dart_CompileAll(); | 
| DartExitOnError(result); | 
| } | 
|  |