OLD | NEW |
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 568 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
579 // The builtin library is part of the core snapshot and would already be | 579 // The builtin library is part of the core snapshot and would already be |
580 // available here in the case of script snapshot loading. | 580 // available here in the case of script snapshot loading. |
581 Dart_Handle builtin_lib = | 581 Dart_Handle builtin_lib = |
582 Builtin::LoadAndCheckLibrary(Builtin::kBuiltinLibrary); | 582 Builtin::LoadAndCheckLibrary(Builtin::kBuiltinLibrary); |
583 CHECK_RESULT(builtin_lib); | 583 CHECK_RESULT(builtin_lib); |
584 | 584 |
585 // Prepare for script loading by setting up the 'print' and 'timer' | 585 // Prepare for script loading by setting up the 'print' and 'timer' |
586 // closures and setting up 'package root' for URI resolution. | 586 // closures and setting up 'package root' for URI resolution. |
587 result = DartUtils::PrepareForScriptLoading(package_root, builtin_lib); | 587 result = DartUtils::PrepareForScriptLoading(package_root, builtin_lib); |
588 CHECK_RESULT(result); | 588 CHECK_RESULT(result); |
589 | 589 if (strcmp(script_uri, "vm-service") == 0) { |
| 590 VmService::SetupIsolate(vm_service_server_ip, vm_service_server_port); |
| 591 Dart_ExitScope(); |
| 592 Dart_ExitIsolate(); |
| 593 return isolate; |
| 594 } |
590 IsolateData* isolate_data = reinterpret_cast<IsolateData*>(data); | 595 IsolateData* isolate_data = reinterpret_cast<IsolateData*>(data); |
591 ASSERT(isolate_data != NULL); | 596 ASSERT(isolate_data != NULL); |
592 ASSERT(isolate_data->script_url != NULL); | 597 ASSERT(isolate_data->script_url != NULL); |
593 result = DartUtils::LoadScript(isolate_data->script_url, builtin_lib); | 598 result = DartUtils::LoadScript(isolate_data->script_url, builtin_lib); |
594 CHECK_RESULT(result); | 599 CHECK_RESULT(result); |
595 | 600 |
596 // Run event-loop and wait for script loading to complete. | 601 // Run event-loop and wait for script loading to complete. |
597 result = Dart_RunLoop(); | 602 result = Dart_RunLoop(); |
598 CHECK_RESULT(result); | 603 CHECK_RESULT(result); |
599 | 604 |
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
647 } | 652 } |
648 IsolateData* isolate_data = new IsolateData(script_uri); | 653 IsolateData* isolate_data = new IsolateData(script_uri); |
649 return CreateIsolateAndSetupHelper(script_uri, | 654 return CreateIsolateAndSetupHelper(script_uri, |
650 main, | 655 main, |
651 isolate_data, | 656 isolate_data, |
652 error, | 657 error, |
653 &is_compile_error); | 658 &is_compile_error); |
654 } | 659 } |
655 | 660 |
656 | 661 |
657 #define CHECK_RESULT(result) \ | |
658 if (Dart_IsError(result)) { \ | |
659 *error = strdup(Dart_GetError(result)); \ | |
660 Dart_ExitScope(); \ | |
661 Dart_ShutdownIsolate(); \ | |
662 return NULL; \ | |
663 } \ | |
664 | |
665 static Dart_Isolate CreateServiceIsolate(void* data, char** error) { | |
666 const char* script_uri = DartUtils::kVMServiceLibURL; | |
667 IsolateData* isolate_data = new IsolateData(script_uri); | |
668 Dart_Isolate isolate = | |
669 Dart_CreateIsolate(script_uri, "main", snapshot_buffer, isolate_data, | |
670 error); | |
671 if (isolate == NULL) { | |
672 return NULL; | |
673 } | |
674 Dart_EnterScope(); | |
675 if (snapshot_buffer != NULL) { | |
676 // Setup the native resolver as the snapshot does not carry it. | |
677 Builtin::SetNativeResolver(Builtin::kBuiltinLibrary); | |
678 Builtin::SetNativeResolver(Builtin::kIOLibrary); | |
679 } | |
680 // Set up the library tag handler for this isolate. | |
681 Dart_Handle result = Dart_SetLibraryTagHandler(DartUtils::LibraryTagHandler); | |
682 CHECK_RESULT(result); | |
683 result = Dart_SetEnvironmentCallback(EnvironmentCallback); | |
684 CHECK_RESULT(result); | |
685 // Prepare builtin and its dependent libraries for use to resolve URIs. | |
686 Dart_Handle builtin_lib = | |
687 Builtin::LoadAndCheckLibrary(Builtin::kBuiltinLibrary); | |
688 CHECK_RESULT(builtin_lib); | |
689 // Prepare for script loading by setting up the 'print' and 'timer' | |
690 // closures and setting up 'package root' for URI resolution. | |
691 result = DartUtils::PrepareForScriptLoading(package_root, builtin_lib); | |
692 CHECK_RESULT(result); | |
693 | |
694 Dart_ExitScope(); | |
695 Dart_ExitIsolate(); | |
696 return isolate; | |
697 } | |
698 | |
699 #undef CHECK_RESULT | |
700 | |
701 static void PrintVersion() { | 662 static void PrintVersion() { |
702 Log::PrintErr("Dart VM version: %s\n", Dart_VersionString()); | 663 Log::PrintErr("Dart VM version: %s\n", Dart_VersionString()); |
703 } | 664 } |
704 | 665 |
705 | 666 |
706 static void PrintUsage() { | 667 static void PrintUsage() { |
707 Log::PrintErr( | 668 Log::PrintErr( |
708 "Usage: dart [<vm-flags>] <dart-script-file> [<dart-options>]\n" | 669 "Usage: dart [<vm-flags>] <dart-script-file> [<dart-options>]\n" |
709 "\n" | 670 "\n" |
710 "Executes the Dart script passed as <dart-script-file>.\n" | 671 "Executes the Dart script passed as <dart-script-file>.\n" |
(...skipping 260 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
971 | 932 |
972 if (!DartUtils::SetOriginalWorkingDirectory()) { | 933 if (!DartUtils::SetOriginalWorkingDirectory()) { |
973 OSError err; | 934 OSError err; |
974 fprintf(stderr, "Error determining current directory: %s\n", err.message()); | 935 fprintf(stderr, "Error determining current directory: %s\n", err.message()); |
975 fflush(stderr); | 936 fflush(stderr); |
976 exit(kErrorExitCode); | 937 exit(kErrorExitCode); |
977 } | 938 } |
978 | 939 |
979 Dart_SetVMFlags(vm_options.count(), vm_options.arguments()); | 940 Dart_SetVMFlags(vm_options.count(), vm_options.arguments()); |
980 | 941 |
| 942 // Start event handler. |
| 943 EventHandler::Start(); |
| 944 |
981 // Initialize the Dart VM. | 945 // Initialize the Dart VM. |
982 if (!Dart_Initialize(CreateIsolateAndSetup, NULL, NULL, ShutdownIsolate, | 946 if (!Dart_Initialize(CreateIsolateAndSetup, NULL, NULL, ShutdownIsolate, |
983 DartUtils::OpenFile, | 947 DartUtils::OpenFile, |
984 DartUtils::ReadFile, | 948 DartUtils::ReadFile, |
985 DartUtils::WriteFile, | 949 DartUtils::WriteFile, |
986 DartUtils::CloseFile, | 950 DartUtils::CloseFile, |
987 DartUtils::EntropySource, | 951 DartUtils::EntropySource)) { |
988 CreateServiceIsolate)) { | |
989 fprintf(stderr, "%s", "VM initialization failed\n"); | 952 fprintf(stderr, "%s", "VM initialization failed\n"); |
990 fflush(stderr); | 953 fflush(stderr); |
991 exit(kErrorExitCode); | 954 exit(kErrorExitCode); |
992 } | 955 } |
993 | 956 |
994 // Start event handler. | 957 |
995 EventHandler::Start(); | |
996 | 958 |
997 // Start the debugger wire protocol handler if necessary. | 959 // Start the debugger wire protocol handler if necessary. |
998 if (start_debugger) { | 960 if (start_debugger) { |
999 ASSERT(debug_port >= 0); | 961 ASSERT(debug_port >= 0); |
1000 bool print_msg = verbose_debug_seen || (debug_port == 0); | 962 bool print_msg = verbose_debug_seen || (debug_port == 0); |
1001 debug_port = DebuggerConnectionHandler::StartHandler(debug_ip, debug_port); | 963 debug_port = DebuggerConnectionHandler::StartHandler(debug_ip, debug_port); |
1002 if (print_msg) { | 964 if (print_msg) { |
1003 Log::Print("Debugger listening on port %d\n", debug_port); | 965 Log::Print("Debugger listening on port %d\n", debug_port); |
1004 } | 966 } |
1005 } | 967 } |
1006 | 968 |
1007 ASSERT(Dart_CurrentIsolate() == NULL); | 969 DebuggerConnectionHandler::InitForVmService(); |
1008 // Start the VM service isolate, if necessary. | 970 Dart_RegisterIsolateServiceRequestCallback( |
1009 if (start_vm_service) { | |
1010 if (!start_debugger) { | |
1011 DebuggerConnectionHandler::InitForVmService(); | |
1012 } | |
1013 bool r = VmService::Start(vm_service_server_ip, vm_service_server_port); | |
1014 if (!r) { | |
1015 Log::PrintErr("Could not start VM Service isolate %s\n", | |
1016 VmService::GetErrorMessage()); | |
1017 } | |
1018 Dart_RegisterIsolateServiceRequestCallback( | |
1019 "io", &ServiceRequestHandler, NULL); | 971 "io", &ServiceRequestHandler, NULL); |
1020 } | |
1021 ASSERT(Dart_CurrentIsolate() == NULL); | |
1022 | 972 |
1023 // Call CreateIsolateAndSetup which creates an isolate and loads up | 973 // Call CreateIsolateAndSetup which creates an isolate and loads up |
1024 // the specified application script. | 974 // the specified application script. |
1025 char* error = NULL; | 975 char* error = NULL; |
1026 bool is_compile_error = false; | 976 bool is_compile_error = false; |
1027 char* isolate_name = BuildIsolateName(script_name, "main"); | 977 char* isolate_name = BuildIsolateName(script_name, "main"); |
1028 IsolateData* isolate_data = new IsolateData(script_name); | 978 IsolateData* isolate_data = new IsolateData(script_name); |
1029 Dart_Isolate isolate = CreateIsolateAndSetupHelper(script_name, | 979 Dart_Isolate isolate = CreateIsolateAndSetupHelper(script_name, |
1030 "main", | 980 "main", |
1031 isolate_data, | 981 isolate_data, |
(...skipping 127 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1159 exit(Process::GlobalExitCode()); | 1109 exit(Process::GlobalExitCode()); |
1160 } | 1110 } |
1161 | 1111 |
1162 } // namespace bin | 1112 } // namespace bin |
1163 } // namespace dart | 1113 } // namespace dart |
1164 | 1114 |
1165 int main(int argc, char** argv) { | 1115 int main(int argc, char** argv) { |
1166 dart::bin::main(argc, argv); | 1116 dart::bin::main(argc, argv); |
1167 UNREACHABLE(); | 1117 UNREACHABLE(); |
1168 } | 1118 } |
OLD | NEW |