Chromium Code Reviews| Index: runtime/bin/main.cc |
| diff --git a/runtime/bin/main.cc b/runtime/bin/main.cc |
| index 5b14dff3ec5c9961d3168e07df1ce9a89931f701..c21a700858792cf8e6302cb49c14da8791238ab1 100644 |
| --- a/runtime/bin/main.cc |
| +++ b/runtime/bin/main.cc |
| @@ -60,6 +60,11 @@ static const int DEFAULT_DEBUG_PORT = 5858; |
| // free'd.) |
| static const char* commandline_package_root = NULL; |
| +// Value of the --packages flag. |
| +// (This pointer points into an argv buffer and does not need to be |
| +// free'd.) |
| +static const char* commandline_packages_file = NULL; |
| + |
| // Global flag that is used to indicate that we want to compile all the |
| // dart functions and not run anything. |
| @@ -169,6 +174,17 @@ static bool ProcessPackageRootOption(const char* arg, |
| } |
| +static bool ProcessPackagesOption(const char* arg, |
| + CommandLineOptions* vm_options) { |
| + ASSERT(arg != NULL); |
| + if (*arg == '\0' || *arg == '-') { |
| + return false; |
| + } |
| + commandline_packages_file = arg; |
| + return true; |
| +} |
| + |
| + |
| static void* GetHashmapKeyFromString(char* key) { |
| return reinterpret_cast<void*>(key); |
| } |
| @@ -371,6 +387,7 @@ static struct { |
| { "--verbose", ProcessVerboseOption }, |
| { "-v", ProcessVerboseOption }, |
| { "--package-root=", ProcessPackageRootOption }, |
| + { "--packages=", ProcessPackagesOption }, |
|
siva
2015/07/28 23:50:09
PrintUsage needs to be updated for this option.
Ivan Posva
2015/07/29 18:22:18
Done.
|
| { "-D", ProcessEnvironmentOption }, |
| // VM specific options to the standalone dart program. |
| { "--break-at=", ProcessBreakpointOption }, |
| @@ -489,6 +506,14 @@ static int ParseArguments(int argc, |
| i++; |
| } |
| + // Verify consistency of arguments. |
| + if ((commandline_package_root != NULL) && |
| + (commandline_packages_file != NULL)) { |
| + Log::PrintErr("Specifying both a packages directory and a packages " |
| + "file is invalid."); |
| + return -1; |
| + } |
| + |
| return 0; |
| } |
| @@ -561,11 +586,14 @@ static Dart_Handle EnvironmentCallback(Dart_Handle name) { |
| static Dart_Isolate CreateIsolateAndSetupHelper(const char* script_uri, |
| const char* main, |
| const char* package_root, |
| + const char* packages_file, |
| Dart_IsolateFlags* flags, |
| char** error, |
| int* exit_code) { |
| ASSERT(script_uri != NULL); |
| - IsolateData* isolate_data = new IsolateData(script_uri, package_root); |
| + IsolateData* isolate_data = new IsolateData(script_uri, |
| + package_root, |
| + packages_file); |
| Dart_Isolate isolate = NULL; |
| isolate = Dart_CreateIsolate(script_uri, |
| @@ -618,6 +646,7 @@ static Dart_Isolate CreateIsolateAndSetupHelper(const char* script_uri, |
| // Prepare for script loading by setting up the 'print' and 'timer' |
| // closures and setting up 'package root' for URI resolution. |
| result = DartUtils::PrepareForScriptLoading(package_root, |
| + packages_file, |
| false, |
| has_trace_loading, |
| builtin_lib); |
| @@ -675,16 +704,17 @@ static Dart_Isolate CreateIsolateAndSetup(const char* script_uri, |
| return NULL; |
| } |
| } |
| + const char* packages_file = NULL; |
| if (package_root == NULL) { |
| if (parent_isolate_data != NULL) { |
| package_root = parent_isolate_data->package_root; |
| - } else { |
| - package_root = "."; |
| + packages_file = parent_isolate_data->packages_file; |
| } |
| } |
| return CreateIsolateAndSetupHelper(script_uri, |
| main, |
| package_root, |
| + packages_file, |
| flags, |
| error, |
| &exit_code); |
| @@ -989,6 +1019,7 @@ void main(int argc, char** argv) { |
| Dart_Isolate isolate = CreateIsolateAndSetupHelper(script_name, |
| "main", |
| commandline_package_root, |
| + commandline_packages_file, |
| NULL, |
| &error, |
| &exit_code); |