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

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

Issue 1232593003: - Implement .packages specification. (Closed) Base URL: git@github.com:dart-lang/sdk.git@master
Patch Set: Address review comments. Created 5 years, 4 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
« no previous file with comments | « runtime/bin/isolate_data.h ('k') | runtime/bin/vmservice/loader.dart » ('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_tools_api.h" 10 #include "include/dart_tools_api.h"
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
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
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
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
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
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
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
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
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
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 }
OLDNEW
« no previous file with comments | « runtime/bin/isolate_data.h ('k') | runtime/bin/vmservice/loader.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698