| 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 213 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 224 } | 224 } |
| 225 return false; | 225 return false; |
| 226 } | 226 } |
| 227 | 227 |
| 228 | 228 |
| 229 static void WriteToPerfEventsFile(const char* buffer, int64_t num_bytes) { | 229 static void WriteToPerfEventsFile(const char* buffer, int64_t num_bytes) { |
| 230 ASSERT(perf_events_symbols_file != NULL); | 230 ASSERT(perf_events_symbols_file != NULL); |
| 231 perf_events_symbols_file->WriteFully(buffer, num_bytes); | 231 perf_events_symbols_file->WriteFully(buffer, num_bytes); |
| 232 } | 232 } |
| 233 | 233 |
| 234 // Convert all the arguments to UTF8. On Windows, the arguments are |
| 235 // encoded in the current code page and not UTF8. |
| 236 // |
| 237 // Returns true if the arguments are converted. In that case |
| 238 // each of the arguments need to be deallocated using free. |
| 239 static bool Utf8ConvertArgv(int argc, char** argv) { |
| 240 bool result = false; |
| 241 for (int i = 0; i < argc; i++) { |
| 242 char* arg = argv[i]; |
| 243 argv[i] = StringUtils::SystemStringToUtf8(arg); |
| 244 if (i == 0) { |
| 245 result = argv[i] != arg; |
| 246 } else { |
| 247 ASSERT(result == (argv[i] != arg)); |
| 248 } |
| 249 } |
| 250 return result; |
| 251 } |
| 252 |
| 234 | 253 |
| 235 // Parse out the command line arguments. Returns -1 if the arguments | 254 // Parse out the command line arguments. Returns -1 if the arguments |
| 236 // are incorrect, 0 otherwise. | 255 // are incorrect, 0 otherwise. |
| 237 static int ParseArguments(int argc, | 256 static int ParseArguments(int argc, |
| 238 char** argv, | 257 char** argv, |
| 239 CommandLineOptions* vm_options, | 258 CommandLineOptions* vm_options, |
| 240 char** executable_name, | 259 char** executable_name, |
| 241 char** script_name, | 260 char** script_name, |
| 242 CommandLineOptions* dart_options, | 261 CommandLineOptions* dart_options, |
| 243 bool* print_flags_seen) { | 262 bool* print_flags_seen) { |
| (...skipping 386 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 630 char* script_name; | 649 char* script_name; |
| 631 CommandLineOptions vm_options(argc); | 650 CommandLineOptions vm_options(argc); |
| 632 CommandLineOptions dart_options(argc); | 651 CommandLineOptions dart_options(argc); |
| 633 bool print_flags_seen = false; | 652 bool print_flags_seen = false; |
| 634 | 653 |
| 635 // Perform platform specific initialization. | 654 // Perform platform specific initialization. |
| 636 if (!Platform::Initialize()) { | 655 if (!Platform::Initialize()) { |
| 637 fprintf(stderr, "Initialization failed\n"); | 656 fprintf(stderr, "Initialization failed\n"); |
| 638 } | 657 } |
| 639 | 658 |
| 659 // On Windows, the argv strings are code page encoded and not |
| 660 // utf8. We need to convert them to utf8. |
| 661 bool argv_converted = Utf8ConvertArgv(argc, argv); |
| 662 |
| 640 // Parse command line arguments. | 663 // Parse command line arguments. |
| 641 if (ParseArguments(argc, | 664 if (ParseArguments(argc, |
| 642 argv, | 665 argv, |
| 643 &vm_options, | 666 &vm_options, |
| 644 &executable_name, | 667 &executable_name, |
| 645 &script_name, | 668 &script_name, |
| 646 &dart_options, | 669 &dart_options, |
| 647 &print_flags_seen) < 0) { | 670 &print_flags_seen) < 0) { |
| 648 if (has_help_option) { | 671 if (has_help_option) { |
| 649 PrintUsage(); | 672 PrintUsage(); |
| (...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 717 Dart_Handle library = Dart_RootLibrary(); | 740 Dart_Handle library = Dart_RootLibrary(); |
| 718 if (Dart_IsNull(library)) { | 741 if (Dart_IsNull(library)) { |
| 719 return ErrorExit("Unable to find root library for '%s'\n", | 742 return ErrorExit("Unable to find root library for '%s'\n", |
| 720 script_name); | 743 script_name); |
| 721 } | 744 } |
| 722 // Set debug breakpoint if specified on the command line. | 745 // Set debug breakpoint if specified on the command line. |
| 723 if (breakpoint_at != NULL) { | 746 if (breakpoint_at != NULL) { |
| 724 result = SetBreakpoint(breakpoint_at, library); | 747 result = SetBreakpoint(breakpoint_at, library); |
| 725 if (Dart_IsError(result)) { | 748 if (Dart_IsError(result)) { |
| 726 return ErrorExit("Error setting breakpoint at '%s': %s\n", | 749 return ErrorExit("Error setting breakpoint at '%s': %s\n", |
| 727 breakpoint_at, | 750 breakpoint_at, |
| 728 Dart_GetError(result)); | 751 Dart_GetError(result)); |
| 729 } | 752 } |
| 730 } | 753 } |
| 731 | 754 |
| 732 // Lookup and invoke the top level main function. | 755 // Lookup and invoke the top level main function. |
| 733 result = Dart_Invoke(library, DartUtils::NewString("main"), 0, NULL); | 756 result = Dart_Invoke(library, DartUtils::NewString("main"), 0, NULL); |
| 734 if (Dart_IsError(result)) { | 757 if (Dart_IsError(result)) { |
| 735 return ErrorExit("%s\n", Dart_GetError(result)); | 758 return ErrorExit("%s\n", Dart_GetError(result)); |
| 736 } | 759 } |
| 737 // Keep handling messages until the last active receive port is closed. | 760 // Keep handling messages until the last active receive port is closed. |
| 738 result = Dart_RunLoop(); | 761 result = Dart_RunLoop(); |
| 739 if (Dart_IsError(result)) { | 762 if (Dart_IsError(result)) { |
| 740 return ErrorExit("%s\n", Dart_GetError(result)); | 763 return ErrorExit("%s\n", Dart_GetError(result)); |
| 741 } | 764 } |
| 742 | 765 |
| 743 Dart_ExitScope(); | 766 Dart_ExitScope(); |
| 744 // Dump symbol information for the profiler. | 767 // Dump symbol information for the profiler. |
| 745 DumpPprofSymbolInfo(); | 768 DumpPprofSymbolInfo(); |
| 746 // Shutdown the isolate. | 769 // Shutdown the isolate. |
| 747 Dart_ShutdownIsolate(); | 770 Dart_ShutdownIsolate(); |
| 748 // Terminate process exit-code handler. | 771 // Terminate process exit-code handler. |
| 749 Process::TerminateExitCodeHandler(); | 772 Process::TerminateExitCodeHandler(); |
| 773 // Free copied argument strings if converted. |
| 774 if (argv_converted) { |
| 775 for (int i = 0; i < argc; i++) free(argv[i]); |
| 776 } |
| 750 | 777 |
| 751 return 0; | 778 return 0; |
| 752 } | 779 } |
| OLD | NEW |