Index: runtime/bin/main.cc |
=================================================================== |
--- runtime/bin/main.cc (revision 43502) |
+++ runtime/bin/main.cc (working copy) |
@@ -75,6 +75,30 @@ |
// being allocated. |
static int vm_service_server_port = -1; |
+ |
+// Exit code indicating an API error. |
+static const int kApiErrorExitCode = 253; |
+// Exit code indicating a compilation error. |
+static const int kCompilationErrorExitCode = 254; |
+// Exit code indicating an unhandled error that is not a compilation error. |
+static const int kErrorExitCode = 255; |
+ |
+static void ErrorExit(int exit_code, const char* format, ...) { |
+ va_list arguments; |
+ va_start(arguments, format); |
+ Log::VPrintErr(format, arguments); |
+ va_end(arguments); |
+ fflush(stderr); |
+ |
+ Dart_ExitScope(); |
+ Dart_ShutdownIsolate(); |
+ |
+ Dart_Cleanup(); |
+ |
+ exit(exit_code); |
+} |
+ |
+ |
// The environment provided through the command line using -D options. |
static dart::HashMap* environment = NULL; |
@@ -540,7 +564,8 @@ |
#define CHECK_RESULT(result) \ |
if (Dart_IsError(result)) { \ |
*error = strdup(Dart_GetError(result)); \ |
- *is_compile_error = Dart_IsCompilationError(result); \ |
+ *exit_code = Dart_IsCompilationError(result) ? kCompilationErrorExitCode : \ |
+ (Dart_IsApiError(result) ? kApiErrorExitCode : kErrorExitCode); \ |
Dart_ExitScope(); \ |
Dart_ShutdownIsolate(); \ |
return NULL; \ |
@@ -552,7 +577,7 @@ |
const char* main, |
const char* package_root, |
char** error, |
- bool* is_compile_error) { |
+ int* exit_code) { |
ASSERT(script_uri != NULL); |
IsolateData* isolate_data = new IsolateData(script_uri, package_root); |
Dart_Isolate isolate = NULL; |
@@ -640,7 +665,7 @@ |
const char* package_root, |
void* data, char** error) { |
IsolateData* parent_isolate_data = reinterpret_cast<IsolateData*>(data); |
- bool is_compile_error = false; |
+ int exit_code = 0; |
if (script_uri == NULL) { |
if (data == NULL) { |
*error = strdup("Invalid 'callback_data' - Unable to spawn new isolate"); |
@@ -663,7 +688,7 @@ |
main, |
package_root, |
error, |
- &is_compile_error); |
+ &exit_code); |
} |
@@ -765,29 +790,6 @@ |
return buffer; |
} |
- |
-// Exit code indicating a compilation error. |
-static const int kCompilationErrorExitCode = 254; |
- |
-// Exit code indicating an unhandled error that is not a compilation error. |
-static const int kErrorExitCode = 255; |
- |
-static void ErrorExit(int exit_code, const char* format, ...) { |
- va_list arguments; |
- va_start(arguments, format); |
- Log::VPrintErr(format, arguments); |
- va_end(arguments); |
- fflush(stderr); |
- |
- Dart_ExitScope(); |
- Dart_ShutdownIsolate(); |
- |
- Dart_Cleanup(); |
- |
- exit(exit_code); |
-} |
- |
- |
static void DartExitOnError(Dart_Handle error) { |
if (!Dart_IsError(error)) { |
return; |
@@ -982,18 +984,18 @@ |
// Call CreateIsolateAndSetup which creates an isolate and loads up |
// the specified application script. |
char* error = NULL; |
- bool is_compile_error = false; |
+ int exit_code = 0; |
char* isolate_name = BuildIsolateName(script_name, "main"); |
Dart_Isolate isolate = CreateIsolateAndSetupHelper(script_name, |
"main", |
commandline_package_root, |
&error, |
- &is_compile_error); |
+ &exit_code); |
if (isolate == NULL) { |
Log::PrintErr("%s\n", error); |
free(error); |
delete [] isolate_name; |
- exit(is_compile_error ? kCompilationErrorExitCode : kErrorExitCode); |
+ exit((exit_code != 0) ? exit_code : kErrorExitCode); |
} |
delete [] isolate_name; |