Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(519)

Side by Side Diff: runtime/bin/main.cc

Issue 899523005: - Return exit code 253 in case of API errors during loading. This (Closed) Base URL: http://dart.googlecode.com/svn/branches/bleeding_edge/dart/
Patch Set: Created 5 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « no previous file | runtime/tests/vm/dart/bad_snapshot » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 #include <stdlib.h> 5 #include <stdlib.h>
6 #include <string.h> 6 #include <string.h>
7 #include <stdio.h> 7 #include <stdio.h>
8 8
9 #include "include/dart_api.h" 9 #include "include/dart_api.h"
10 #include "include/dart_debugger_api.h" 10 #include "include/dart_debugger_api.h"
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after
68 68
69 static const char* DEFAULT_VM_SERVICE_SERVER_IP = "127.0.0.1"; 69 static const char* DEFAULT_VM_SERVICE_SERVER_IP = "127.0.0.1";
70 static const int DEFAULT_VM_SERVICE_SERVER_PORT = 8181; 70 static const int DEFAULT_VM_SERVICE_SERVER_PORT = 8181;
71 // VM Service options. 71 // VM Service options.
72 static bool start_vm_service = false; 72 static bool start_vm_service = false;
73 static const char* vm_service_server_ip = DEFAULT_VM_SERVICE_SERVER_IP; 73 static const char* vm_service_server_ip = DEFAULT_VM_SERVICE_SERVER_IP;
74 // The 0 port is a magic value which results in the first available port 74 // The 0 port is a magic value which results in the first available port
75 // being allocated. 75 // being allocated.
76 static int vm_service_server_port = -1; 76 static int vm_service_server_port = -1;
77 77
78
79 // Exit code indicating an API error.
80 static const int kApiErrorExitCode = 253;
81 // Exit code indicating a compilation error.
82 static const int kCompilationErrorExitCode = 254;
83 // Exit code indicating an unhandled error that is not a compilation error.
84 static const int kErrorExitCode = 255;
85
86 static void ErrorExit(int exit_code, const char* format, ...) {
87 va_list arguments;
88 va_start(arguments, format);
89 Log::VPrintErr(format, arguments);
90 va_end(arguments);
91 fflush(stderr);
92
93 Dart_ExitScope();
94 Dart_ShutdownIsolate();
95
96 Dart_Cleanup();
97
98 exit(exit_code);
99 }
100
101
78 // The environment provided through the command line using -D options. 102 // The environment provided through the command line using -D options.
79 static dart::HashMap* environment = NULL; 103 static dart::HashMap* environment = NULL;
80 104
81 static bool IsValidFlag(const char* name, 105 static bool IsValidFlag(const char* name,
82 const char* prefix, 106 const char* prefix,
83 intptr_t prefix_length) { 107 intptr_t prefix_length) {
84 intptr_t name_length = strlen(name); 108 intptr_t name_length = strlen(name);
85 return ((name_length > prefix_length) && 109 return ((name_length > prefix_length) &&
86 (strncmp(name, prefix, prefix_length) == 0)); 110 (strncmp(name, prefix, prefix_length) == 0));
87 } 111 }
(...skipping 445 matching lines...) Expand 10 before | Expand all | Expand 10 after
533 } 557 }
534 free(name_chars); 558 free(name_chars);
535 } 559 }
536 return result; 560 return result;
537 } 561 }
538 562
539 563
540 #define CHECK_RESULT(result) \ 564 #define CHECK_RESULT(result) \
541 if (Dart_IsError(result)) { \ 565 if (Dart_IsError(result)) { \
542 *error = strdup(Dart_GetError(result)); \ 566 *error = strdup(Dart_GetError(result)); \
543 *is_compile_error = Dart_IsCompilationError(result); \ 567 *exit_code = Dart_IsCompilationError(result) ? kCompilationErrorExitCode : \
568 (Dart_IsApiError(result) ? kApiErrorExitCode : kErrorExitCode); \
544 Dart_ExitScope(); \ 569 Dart_ExitScope(); \
545 Dart_ShutdownIsolate(); \ 570 Dart_ShutdownIsolate(); \
546 return NULL; \ 571 return NULL; \
547 } \ 572 } \
548 573
549 574
550 // Returns true on success, false on failure. 575 // Returns true on success, false on failure.
551 static Dart_Isolate CreateIsolateAndSetupHelper(const char* script_uri, 576 static Dart_Isolate CreateIsolateAndSetupHelper(const char* script_uri,
552 const char* main, 577 const char* main,
553 const char* package_root, 578 const char* package_root,
554 char** error, 579 char** error,
555 bool* is_compile_error) { 580 int* exit_code) {
556 ASSERT(script_uri != NULL); 581 ASSERT(script_uri != NULL);
557 IsolateData* isolate_data = new IsolateData(script_uri, package_root); 582 IsolateData* isolate_data = new IsolateData(script_uri, package_root);
558 Dart_Isolate isolate = NULL; 583 Dart_Isolate isolate = NULL;
559 584
560 isolate = Dart_CreateIsolate(script_uri, 585 isolate = Dart_CreateIsolate(script_uri,
561 main, 586 main,
562 snapshot_buffer, 587 snapshot_buffer,
563 isolate_data, 588 isolate_data,
564 error); 589 error);
565 590
(...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after
633 return isolate; 658 return isolate;
634 } 659 }
635 660
636 #undef CHECK_RESULT 661 #undef CHECK_RESULT
637 662
638 static Dart_Isolate CreateIsolateAndSetup(const char* script_uri, 663 static Dart_Isolate CreateIsolateAndSetup(const char* script_uri,
639 const char* main, 664 const char* main,
640 const char* package_root, 665 const char* package_root,
641 void* data, char** error) { 666 void* data, char** error) {
642 IsolateData* parent_isolate_data = reinterpret_cast<IsolateData*>(data); 667 IsolateData* parent_isolate_data = reinterpret_cast<IsolateData*>(data);
643 bool is_compile_error = false; 668 int exit_code = 0;
644 if (script_uri == NULL) { 669 if (script_uri == NULL) {
645 if (data == NULL) { 670 if (data == NULL) {
646 *error = strdup("Invalid 'callback_data' - Unable to spawn new isolate"); 671 *error = strdup("Invalid 'callback_data' - Unable to spawn new isolate");
647 return NULL; 672 return NULL;
648 } 673 }
649 script_uri = parent_isolate_data->script_url; 674 script_uri = parent_isolate_data->script_url;
650 if (script_uri == NULL) { 675 if (script_uri == NULL) {
651 *error = strdup("Invalid 'callback_data' - Unable to spawn new isolate"); 676 *error = strdup("Invalid 'callback_data' - Unable to spawn new isolate");
652 return NULL; 677 return NULL;
653 } 678 }
654 } 679 }
655 if (package_root == NULL) { 680 if (package_root == NULL) {
656 if (parent_isolate_data != NULL) { 681 if (parent_isolate_data != NULL) {
657 package_root = parent_isolate_data->package_root; 682 package_root = parent_isolate_data->package_root;
658 } else { 683 } else {
659 package_root = "."; 684 package_root = ".";
660 } 685 }
661 } 686 }
662 return CreateIsolateAndSetupHelper(script_uri, 687 return CreateIsolateAndSetupHelper(script_uri,
663 main, 688 main,
664 package_root, 689 package_root,
665 error, 690 error,
666 &is_compile_error); 691 &exit_code);
667 } 692 }
668 693
669 694
670 static void PrintVersion() { 695 static void PrintVersion() {
671 Log::PrintErr("Dart VM version: %s\n", Dart_VersionString()); 696 Log::PrintErr("Dart VM version: %s\n", Dart_VersionString());
672 } 697 }
673 698
674 699
675 static void PrintUsage() { 700 static void PrintUsage() {
676 Log::PrintErr( 701 Log::PrintErr(
(...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after
758 } 783 }
759 784
760 const char* kFormat = "%s/%s"; 785 const char* kFormat = "%s/%s";
761 intptr_t len = strlen(script_name) + strlen(func_name) + 2; 786 intptr_t len = strlen(script_name) + strlen(func_name) + 2;
762 char* buffer = new char[len]; 787 char* buffer = new char[len];
763 ASSERT(buffer != NULL); 788 ASSERT(buffer != NULL);
764 snprintf(buffer, len, kFormat, script_name, func_name); 789 snprintf(buffer, len, kFormat, script_name, func_name);
765 return buffer; 790 return buffer;
766 } 791 }
767 792
768
769 // Exit code indicating a compilation error.
770 static const int kCompilationErrorExitCode = 254;
771
772 // Exit code indicating an unhandled error that is not a compilation error.
773 static const int kErrorExitCode = 255;
774
775 static void ErrorExit(int exit_code, const char* format, ...) {
776 va_list arguments;
777 va_start(arguments, format);
778 Log::VPrintErr(format, arguments);
779 va_end(arguments);
780 fflush(stderr);
781
782 Dart_ExitScope();
783 Dart_ShutdownIsolate();
784
785 Dart_Cleanup();
786
787 exit(exit_code);
788 }
789
790
791 static void DartExitOnError(Dart_Handle error) { 793 static void DartExitOnError(Dart_Handle error) {
792 if (!Dart_IsError(error)) { 794 if (!Dart_IsError(error)) {
793 return; 795 return;
794 } 796 }
795 const int exit_code = Dart_IsCompilationError(error) ? 797 const int exit_code = Dart_IsCompilationError(error) ?
796 kCompilationErrorExitCode : kErrorExitCode; 798 kCompilationErrorExitCode : kErrorExitCode;
797 ErrorExit(exit_code, "%s\n", Dart_GetError(error)); 799 ErrorExit(exit_code, "%s\n", Dart_GetError(error));
798 } 800 }
799 801
800 802
(...skipping 174 matching lines...) Expand 10 before | Expand all | Expand 10 after
975 } else { 977 } else {
976 DebuggerConnectionHandler::InitForVmService(); 978 DebuggerConnectionHandler::InitForVmService();
977 } 979 }
978 980
979 Dart_RegisterIsolateServiceRequestCallback( 981 Dart_RegisterIsolateServiceRequestCallback(
980 "io", &ServiceRequestHandler, NULL); 982 "io", &ServiceRequestHandler, NULL);
981 983
982 // Call CreateIsolateAndSetup which creates an isolate and loads up 984 // Call CreateIsolateAndSetup which creates an isolate and loads up
983 // the specified application script. 985 // the specified application script.
984 char* error = NULL; 986 char* error = NULL;
985 bool is_compile_error = false; 987 int exit_code = 0;
986 char* isolate_name = BuildIsolateName(script_name, "main"); 988 char* isolate_name = BuildIsolateName(script_name, "main");
987 Dart_Isolate isolate = CreateIsolateAndSetupHelper(script_name, 989 Dart_Isolate isolate = CreateIsolateAndSetupHelper(script_name,
988 "main", 990 "main",
989 commandline_package_root, 991 commandline_package_root,
990 &error, 992 &error,
991 &is_compile_error); 993 &exit_code);
992 if (isolate == NULL) { 994 if (isolate == NULL) {
993 Log::PrintErr("%s\n", error); 995 Log::PrintErr("%s\n", error);
994 free(error); 996 free(error);
995 delete [] isolate_name; 997 delete [] isolate_name;
996 exit(is_compile_error ? kCompilationErrorExitCode : kErrorExitCode); 998 exit((exit_code != 0) ? exit_code : kErrorExitCode);
997 } 999 }
998 delete [] isolate_name; 1000 delete [] isolate_name;
999 1001
1000 Dart_EnterIsolate(isolate); 1002 Dart_EnterIsolate(isolate);
1001 ASSERT(isolate == Dart_CurrentIsolate()); 1003 ASSERT(isolate == Dart_CurrentIsolate());
1002 ASSERT(isolate != NULL); 1004 ASSERT(isolate != NULL);
1003 Dart_Handle result; 1005 Dart_Handle result;
1004 1006
1005 Dart_EnterScope(); 1007 Dart_EnterScope();
1006 1008
(...skipping 110 matching lines...) Expand 10 before | Expand all | Expand 10 after
1117 exit(Process::GlobalExitCode()); 1119 exit(Process::GlobalExitCode());
1118 } 1120 }
1119 1121
1120 } // namespace bin 1122 } // namespace bin
1121 } // namespace dart 1123 } // namespace dart
1122 1124
1123 int main(int argc, char** argv) { 1125 int main(int argc, char** argv) {
1124 dart::bin::main(argc, argv); 1126 dart::bin::main(argc, argv);
1125 UNREACHABLE(); 1127 UNREACHABLE();
1126 } 1128 }
OLDNEW
« no previous file with comments | « no previous file | runtime/tests/vm/dart/bad_snapshot » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698