| 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_tools_api.h" | 10 #include "include/dart_tools_api.h" |
| (...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 53 static const char* debug_ip = NULL; | 53 static const char* debug_ip = NULL; |
| 54 static int debug_port = -1; | 54 static int debug_port = -1; |
| 55 static const char* DEFAULT_DEBUG_IP = "127.0.0.1"; | 55 static const char* DEFAULT_DEBUG_IP = "127.0.0.1"; |
| 56 static const int DEFAULT_DEBUG_PORT = 5858; | 56 static const int DEFAULT_DEBUG_PORT = 5858; |
| 57 | 57 |
| 58 // Value of the --package-root flag. | 58 // Value of the --package-root flag. |
| 59 // (This pointer points into an argv buffer and does not need to be | 59 // (This pointer points into an argv buffer and does not need to be |
| 60 // free'd.) | 60 // free'd.) |
| 61 static const char* commandline_package_root = NULL; | 61 static const char* commandline_package_root = NULL; |
| 62 | 62 |
| 63 // Value of the --packages flag. |
| 64 // (This pointer points into an argv buffer and does not need to be |
| 65 // free'd.) |
| 66 static const char* commandline_packages_file = NULL; |
| 67 |
| 63 | 68 |
| 64 // Global flag that is used to indicate that we want to compile all the | 69 // Global flag that is used to indicate that we want to compile all the |
| 65 // dart functions and not run anything. | 70 // dart functions and not run anything. |
| 66 static bool has_compile_all = false; | 71 static bool has_compile_all = false; |
| 67 | 72 |
| 68 // Global flag that is used to indicate that we want to trace resolution of | 73 // Global flag that is used to indicate that we want to trace resolution of |
| 69 // URIs and the loading of libraries, parts and scripts. | 74 // URIs and the loading of libraries, parts and scripts. |
| 70 static bool has_trace_loading = false; | 75 static bool has_trace_loading = false; |
| 71 | 76 |
| 72 | 77 |
| (...skipping 89 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 162 CommandLineOptions* vm_options) { | 167 CommandLineOptions* vm_options) { |
| 163 ASSERT(arg != NULL); | 168 ASSERT(arg != NULL); |
| 164 if (*arg == '\0' || *arg == '-') { | 169 if (*arg == '\0' || *arg == '-') { |
| 165 return false; | 170 return false; |
| 166 } | 171 } |
| 167 commandline_package_root = arg; | 172 commandline_package_root = arg; |
| 168 return true; | 173 return true; |
| 169 } | 174 } |
| 170 | 175 |
| 171 | 176 |
| 177 static bool ProcessPackagesOption(const char* arg, |
| 178 CommandLineOptions* vm_options) { |
| 179 ASSERT(arg != NULL); |
| 180 if (*arg == '\0' || *arg == '-') { |
| 181 return false; |
| 182 } |
| 183 commandline_packages_file = arg; |
| 184 return true; |
| 185 } |
| 186 |
| 187 |
| 172 static void* GetHashmapKeyFromString(char* key) { | 188 static void* GetHashmapKeyFromString(char* key) { |
| 173 return reinterpret_cast<void*>(key); | 189 return reinterpret_cast<void*>(key); |
| 174 } | 190 } |
| 175 | 191 |
| 176 | 192 |
| 177 static bool ExtractPortAndIP(const char *option_value, | 193 static bool ExtractPortAndIP(const char *option_value, |
| 178 int *out_port, | 194 int *out_port, |
| 179 const char **out_ip, | 195 const char **out_ip, |
| 180 int default_port, | 196 int default_port, |
| 181 const char *default_ip) { | 197 const char *default_ip) { |
| (...skipping 182 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 364 const char* option_name; | 380 const char* option_name; |
| 365 bool (*process)(const char* option, CommandLineOptions* vm_options); | 381 bool (*process)(const char* option, CommandLineOptions* vm_options); |
| 366 } main_options[] = { | 382 } main_options[] = { |
| 367 // Standard options shared with dart2js. | 383 // Standard options shared with dart2js. |
| 368 { "--version", ProcessVersionOption }, | 384 { "--version", ProcessVersionOption }, |
| 369 { "--help", ProcessHelpOption }, | 385 { "--help", ProcessHelpOption }, |
| 370 { "-h", ProcessHelpOption }, | 386 { "-h", ProcessHelpOption }, |
| 371 { "--verbose", ProcessVerboseOption }, | 387 { "--verbose", ProcessVerboseOption }, |
| 372 { "-v", ProcessVerboseOption }, | 388 { "-v", ProcessVerboseOption }, |
| 373 { "--package-root=", ProcessPackageRootOption }, | 389 { "--package-root=", ProcessPackageRootOption }, |
| 390 { "--packages=", ProcessPackagesOption }, |
| 374 { "-D", ProcessEnvironmentOption }, | 391 { "-D", ProcessEnvironmentOption }, |
| 375 // VM specific options to the standalone dart program. | 392 // VM specific options to the standalone dart program. |
| 376 { "--break-at=", ProcessBreakpointOption }, | 393 { "--break-at=", ProcessBreakpointOption }, |
| 377 { "--compile_all", ProcessCompileAllOption }, | 394 { "--compile_all", ProcessCompileAllOption }, |
| 378 { "--debug", ProcessDebugOption }, | 395 { "--debug", ProcessDebugOption }, |
| 379 { "--snapshot=", ProcessGenScriptSnapshotOption }, | 396 { "--snapshot=", ProcessGenScriptSnapshotOption }, |
| 380 { "--enable-vm-service", ProcessEnableVmServiceOption }, | 397 { "--enable-vm-service", ProcessEnableVmServiceOption }, |
| 381 { "--observe", ProcessObserveOption }, | 398 { "--observe", ProcessObserveOption }, |
| 382 { "--trace-debug-protocol", ProcessTraceDebugProtocolOption }, | 399 { "--trace-debug-protocol", ProcessTraceDebugProtocolOption }, |
| 383 { "--trace-loading", ProcessTraceLoadingOption}, | 400 { "--trace-loading", ProcessTraceLoadingOption}, |
| (...skipping 98 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 482 } else { | 499 } else { |
| 483 return -1; | 500 return -1; |
| 484 } | 501 } |
| 485 | 502 |
| 486 // Parse out options to be passed to dart main. | 503 // Parse out options to be passed to dart main. |
| 487 while (i < argc) { | 504 while (i < argc) { |
| 488 dart_options->AddArgument(argv[i]); | 505 dart_options->AddArgument(argv[i]); |
| 489 i++; | 506 i++; |
| 490 } | 507 } |
| 491 | 508 |
| 509 // Verify consistency of arguments. |
| 510 if ((commandline_package_root != NULL) && |
| 511 (commandline_packages_file != NULL)) { |
| 512 Log::PrintErr("Specifying both a packages directory and a packages " |
| 513 "file is invalid."); |
| 514 return -1; |
| 515 } |
| 516 |
| 492 return 0; | 517 return 0; |
| 493 } | 518 } |
| 494 | 519 |
| 495 | 520 |
| 496 static Dart_Handle CreateRuntimeOptions(CommandLineOptions* options) { | 521 static Dart_Handle CreateRuntimeOptions(CommandLineOptions* options) { |
| 497 int options_count = options->count(); | 522 int options_count = options->count(); |
| 498 Dart_Handle dart_arguments = Dart_NewList(options_count); | 523 Dart_Handle dart_arguments = Dart_NewList(options_count); |
| 499 if (Dart_IsError(dart_arguments)) { | 524 if (Dart_IsError(dart_arguments)) { |
| 500 return dart_arguments; | 525 return dart_arguments; |
| 501 } | 526 } |
| (...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 554 Dart_ExitScope(); \ | 579 Dart_ExitScope(); \ |
| 555 Dart_ShutdownIsolate(); \ | 580 Dart_ShutdownIsolate(); \ |
| 556 return NULL; \ | 581 return NULL; \ |
| 557 } \ | 582 } \ |
| 558 | 583 |
| 559 | 584 |
| 560 // Returns true on success, false on failure. | 585 // Returns true on success, false on failure. |
| 561 static Dart_Isolate CreateIsolateAndSetupHelper(const char* script_uri, | 586 static Dart_Isolate CreateIsolateAndSetupHelper(const char* script_uri, |
| 562 const char* main, | 587 const char* main, |
| 563 const char* package_root, | 588 const char* package_root, |
| 589 const char* packages_file, |
| 564 Dart_IsolateFlags* flags, | 590 Dart_IsolateFlags* flags, |
| 565 char** error, | 591 char** error, |
| 566 int* exit_code) { | 592 int* exit_code) { |
| 567 ASSERT(script_uri != NULL); | 593 ASSERT(script_uri != NULL); |
| 568 IsolateData* isolate_data = new IsolateData(script_uri, package_root); | 594 IsolateData* isolate_data = new IsolateData(script_uri, |
| 595 package_root, |
| 596 packages_file); |
| 569 Dart_Isolate isolate = NULL; | 597 Dart_Isolate isolate = NULL; |
| 570 | 598 |
| 571 isolate = Dart_CreateIsolate(script_uri, | 599 isolate = Dart_CreateIsolate(script_uri, |
| 572 main, | 600 main, |
| 573 isolate_snapshot_buffer, | 601 isolate_snapshot_buffer, |
| 574 flags, | 602 flags, |
| 575 isolate_data, | 603 isolate_data, |
| 576 error); | 604 error); |
| 577 | 605 |
| 578 if (isolate == NULL) { | 606 if (isolate == NULL) { |
| (...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 611 // Prepare builtin and its dependent libraries for use to resolve URIs. | 639 // Prepare builtin and its dependent libraries for use to resolve URIs. |
| 612 // The builtin library is part of the core snapshot and would already be | 640 // The builtin library is part of the core snapshot and would already be |
| 613 // available here in the case of script snapshot loading. | 641 // available here in the case of script snapshot loading. |
| 614 Dart_Handle builtin_lib = | 642 Dart_Handle builtin_lib = |
| 615 Builtin::LoadAndCheckLibrary(Builtin::kBuiltinLibrary); | 643 Builtin::LoadAndCheckLibrary(Builtin::kBuiltinLibrary); |
| 616 CHECK_RESULT(builtin_lib); | 644 CHECK_RESULT(builtin_lib); |
| 617 | 645 |
| 618 // Prepare for script loading by setting up the 'print' and 'timer' | 646 // Prepare for script loading by setting up the 'print' and 'timer' |
| 619 // closures and setting up 'package root' for URI resolution. | 647 // closures and setting up 'package root' for URI resolution. |
| 620 result = DartUtils::PrepareForScriptLoading(package_root, | 648 result = DartUtils::PrepareForScriptLoading(package_root, |
| 649 packages_file, |
| 621 false, | 650 false, |
| 622 has_trace_loading, | 651 has_trace_loading, |
| 623 builtin_lib); | 652 builtin_lib); |
| 624 CHECK_RESULT(result); | 653 CHECK_RESULT(result); |
| 625 | 654 |
| 626 result = Dart_SetEnvironmentCallback(EnvironmentCallback); | 655 result = Dart_SetEnvironmentCallback(EnvironmentCallback); |
| 627 CHECK_RESULT(result); | 656 CHECK_RESULT(result); |
| 628 | 657 |
| 629 // Load the script. | 658 // Load the script. |
| 630 result = DartUtils::LoadScript(script_uri, builtin_lib); | 659 result = DartUtils::LoadScript(script_uri, builtin_lib); |
| (...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 668 if (data == NULL) { | 697 if (data == NULL) { |
| 669 *error = strdup("Invalid 'callback_data' - Unable to spawn new isolate"); | 698 *error = strdup("Invalid 'callback_data' - Unable to spawn new isolate"); |
| 670 return NULL; | 699 return NULL; |
| 671 } | 700 } |
| 672 script_uri = parent_isolate_data->script_url; | 701 script_uri = parent_isolate_data->script_url; |
| 673 if (script_uri == NULL) { | 702 if (script_uri == NULL) { |
| 674 *error = strdup("Invalid 'callback_data' - Unable to spawn new isolate"); | 703 *error = strdup("Invalid 'callback_data' - Unable to spawn new isolate"); |
| 675 return NULL; | 704 return NULL; |
| 676 } | 705 } |
| 677 } | 706 } |
| 707 const char* packages_file = NULL; |
| 678 if (package_root == NULL) { | 708 if (package_root == NULL) { |
| 679 if (parent_isolate_data != NULL) { | 709 if (parent_isolate_data != NULL) { |
| 680 package_root = parent_isolate_data->package_root; | 710 package_root = parent_isolate_data->package_root; |
| 681 } else { | 711 packages_file = parent_isolate_data->packages_file; |
| 682 package_root = "."; | |
| 683 } | 712 } |
| 684 } | 713 } |
| 685 return CreateIsolateAndSetupHelper(script_uri, | 714 return CreateIsolateAndSetupHelper(script_uri, |
| 686 main, | 715 main, |
| 687 package_root, | 716 package_root, |
| 717 packages_file, |
| 688 flags, | 718 flags, |
| 689 error, | 719 error, |
| 690 &exit_code); | 720 &exit_code); |
| 691 } | 721 } |
| 692 | 722 |
| 693 | 723 |
| 694 static void PrintVersion() { | 724 static void PrintVersion() { |
| 695 Log::PrintErr("Dart VM version: %s\n", Dart_VersionString()); | 725 Log::PrintErr("Dart VM version: %s\n", Dart_VersionString()); |
| 696 } | 726 } |
| 697 | 727 |
| 698 | 728 |
| 699 static void PrintUsage() { | 729 static void PrintUsage() { |
| 700 Log::PrintErr( | 730 Log::PrintErr( |
| 701 "Usage: dart [<vm-flags>] <dart-script-file> [<dart-options>]\n" | 731 "Usage: dart [<vm-flags>] <dart-script-file> [<dart-options>]\n" |
| 702 "\n" | 732 "\n" |
| 703 "Executes the Dart script passed as <dart-script-file>.\n" | 733 "Executes the Dart script passed as <dart-script-file>.\n" |
| 704 "\n"); | 734 "\n"); |
| 705 if (!has_verbose_option) { | 735 if (!has_verbose_option) { |
| 706 Log::PrintErr( | 736 Log::PrintErr( |
| 707 "Common options:\n" | 737 "Common options:\n" |
| 708 "--checked or -c\n" | 738 "--checked or -c\n" |
| 709 " Insert runtime type checks and enable assertions (checked mode).\n" | 739 " Insert runtime type checks and enable assertions (checked mode).\n" |
| 710 "--help or -h\n" | 740 "--help or -h\n" |
| 711 " Display this message (add -v or --verbose for information about\n" | 741 " Display this message (add -v or --verbose for information about\n" |
| 712 " all VM options).\n" | 742 " all VM options).\n" |
| 713 "--package-root=<path> or -p<path>\n" | 743 "--package-root=<path> or -p<path>\n" |
| 714 " Where to find packages, that is, \"package:...\" imports.\n" | 744 " Where to find packages, that is, \"package:...\" imports.\n" |
| 745 "--packages=<path>\n" |
| 746 " Where to find a package spec file.\n" |
| 715 "--version\n" | 747 "--version\n" |
| 716 " Print the VM version.\n"); | 748 " Print the VM version.\n"); |
| 717 } else { | 749 } else { |
| 718 Log::PrintErr( | 750 Log::PrintErr( |
| 719 "Supported options:\n" | 751 "Supported options:\n" |
| 720 "--checked or -c\n" | 752 "--checked or -c\n" |
| 721 " Insert runtime type checks and enable assertions (checked mode).\n" | 753 " Insert runtime type checks and enable assertions (checked mode).\n" |
| 722 "--help or -h\n" | 754 "--help or -h\n" |
| 723 " Display this message (add -v or --verbose for information about\n" | 755 " Display this message (add -v or --verbose for information about\n" |
| 724 " all VM options).\n" | 756 " all VM options).\n" |
| (...skipping 257 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 982 &ServiceStreamCancelCallback); | 1014 &ServiceStreamCancelCallback); |
| 983 | 1015 |
| 984 // Call CreateIsolateAndSetup which creates an isolate and loads up | 1016 // Call CreateIsolateAndSetup which creates an isolate and loads up |
| 985 // the specified application script. | 1017 // the specified application script. |
| 986 char* error = NULL; | 1018 char* error = NULL; |
| 987 int exit_code = 0; | 1019 int exit_code = 0; |
| 988 char* isolate_name = BuildIsolateName(script_name, "main"); | 1020 char* isolate_name = BuildIsolateName(script_name, "main"); |
| 989 Dart_Isolate isolate = CreateIsolateAndSetupHelper(script_name, | 1021 Dart_Isolate isolate = CreateIsolateAndSetupHelper(script_name, |
| 990 "main", | 1022 "main", |
| 991 commandline_package_root, | 1023 commandline_package_root, |
| 1024 commandline_packages_file, |
| 992 NULL, | 1025 NULL, |
| 993 &error, | 1026 &error, |
| 994 &exit_code); | 1027 &exit_code); |
| 995 if (isolate == NULL) { | 1028 if (isolate == NULL) { |
| 996 Log::PrintErr("%s\n", error); | 1029 Log::PrintErr("%s\n", error); |
| 997 free(error); | 1030 free(error); |
| 998 delete [] isolate_name; | 1031 delete [] isolate_name; |
| 999 exit((exit_code != 0) ? exit_code : kErrorExitCode); | 1032 exit((exit_code != 0) ? exit_code : kErrorExitCode); |
| 1000 } | 1033 } |
| 1001 delete [] isolate_name; | 1034 delete [] isolate_name; |
| (...skipping 115 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1117 exit(Process::GlobalExitCode()); | 1150 exit(Process::GlobalExitCode()); |
| 1118 } | 1151 } |
| 1119 | 1152 |
| 1120 } // namespace bin | 1153 } // namespace bin |
| 1121 } // namespace dart | 1154 } // namespace dart |
| 1122 | 1155 |
| 1123 int main(int argc, char** argv) { | 1156 int main(int argc, char** argv) { |
| 1124 dart::bin::main(argc, argv); | 1157 dart::bin::main(argc, argv); |
| 1125 UNREACHABLE(); | 1158 UNREACHABLE(); |
| 1126 } | 1159 } |
| OLD | NEW |