| Index: sdk/lib/_internal/compiler/implementation/dart2js.dart
|
| diff --git a/sdk/lib/_internal/compiler/implementation/dart2js.dart b/sdk/lib/_internal/compiler/implementation/dart2js.dart
|
| index 07a32000b008b488954f8f0c6160840b5f3483b0..c1dae8e9abc623462132a90f8e727d516ce147e9 100644
|
| --- a/sdk/lib/_internal/compiler/implementation/dart2js.dart
|
| +++ b/sdk/lib/_internal/compiler/implementation/dart2js.dart
|
| @@ -29,13 +29,19 @@ const String OUTPUT_LANGUAGE_DART = 'Dart';
|
| */
|
| String BUILD_ID = null;
|
|
|
| -typedef void HandleOption(String option);
|
| +/**
|
| + * The data passed to the [HandleOption] callback is either a single
|
| + * string argument, or the arguments iterator for multiple arguments
|
| + * handlers.
|
| + */
|
| +typedef void HandleOption(data);
|
|
|
| class OptionHandler {
|
| - String pattern;
|
| - HandleOption handle;
|
| + final String pattern;
|
| + final HandleOption handle;
|
| + final bool multipleArguments;
|
|
|
| - OptionHandler(this.pattern, this.handle);
|
| + OptionHandler(this.pattern, this.handle, {this.multipleArguments: false});
|
| }
|
|
|
| /**
|
| @@ -64,12 +70,20 @@ void parseCommandLine(List<OptionHandler> handlers, List<String> argv) {
|
| patterns.add(handler.pattern);
|
| }
|
| var pattern = new RegExp('^(${patterns.join(")\$|(")})\$');
|
| - OUTER: for (String argument in argv) {
|
| +
|
| + Iterator<String> arguments = argv.iterator;
|
| + OUTER: while (arguments.moveNext()) {
|
| + String argument = arguments.current;
|
| Match match = pattern.firstMatch(argument);
|
| assert(match.groupCount == handlers.length);
|
| for (int i = 0; i < handlers.length; i++) {
|
| if (match[i + 1] != null) {
|
| - handlers[i].handle(argument);
|
| + OptionHandler handler = handlers[i];
|
| + if (handler.multipleArguments) {
|
| + handler.handle(arguments);
|
| + } else {
|
| + handler.handle(argument);
|
| + }
|
| continue OUTER;
|
| }
|
| }
|
| @@ -108,9 +122,18 @@ void compile(List<String> argv) {
|
| packageRoot = currentDirectory.resolve(extractPath(argument));
|
| }
|
|
|
| - setOutput(String argument) {
|
| + setOutput(Iterator<String> arguments) {
|
| + String path;
|
| + if (arguments.current == '-o') {
|
| + if (!arguments.moveNext()) {
|
| + helpAndFail('Error: Missing file after -o option.');
|
| + }
|
| + path = arguments.current;
|
| + } else {
|
| + path = extractParameter(arguments.current);
|
| + }
|
| explicitOut = true;
|
| - out = currentDirectory.resolve(nativeToUriPath(extractParameter(argument)));
|
| + out = currentDirectory.resolve(nativeToUriPath(path));
|
| sourceMapOut = Uri.parse('$out.map');
|
| }
|
|
|
| @@ -208,7 +231,7 @@ void compile(List<String> argv) {
|
| new OptionHandler('--verbose', setVerbose),
|
| new OptionHandler('--version', (_) => wantVersion = true),
|
| new OptionHandler('--library-root=.+', setLibraryRoot),
|
| - new OptionHandler('--out=.+|-o.+', setOutput),
|
| + new OptionHandler('--out=.+|-o.*', setOutput, multipleArguments: true),
|
| new OptionHandler('--allow-mock-compilation', passThrough),
|
| new OptionHandler('--minify', passThrough),
|
| new OptionHandler('--force-strip=.*', setStrip),
|
| @@ -402,9 +425,9 @@ Usage: dart2js [options] dartfile
|
| Compiles Dart to JavaScript.
|
|
|
| Common options:
|
| - -o<file> Generate the output into <file>.
|
| - -c Insert runtime type checks and enable assertions (checked mode).
|
| - -h Display this message (add -v for information about all options).''');
|
| + -o <file> Generate the output into <file>.
|
| + -c Insert runtime type checks and enable assertions (checked mode).
|
| + -h Display this message (add -v for information about all options).''');
|
| }
|
|
|
| void verboseHelp() {
|
| @@ -414,7 +437,7 @@ Usage: dart2js [options] dartfile
|
| Compiles Dart to JavaScript.
|
|
|
| Supported options:
|
| - -o<file>, --out=<file>
|
| + -o <file>, --out=<file>
|
| Generate the output into <file>.
|
|
|
| -c, --enable-checked-mode, --checked
|
|
|