OLD | NEW |
1 // Copyright (c) 2016, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2016, 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 import 'dart:io'; | 5 import 'dart:io'; |
6 import 'package:analyzer/src/generated/source.dart' show Source; | 6 import 'package:analyzer/src/generated/source.dart' show Source; |
7 import 'package:analyzer/src/summary/package_bundle_reader.dart' | 7 import 'package:analyzer/src/summary/package_bundle_reader.dart' |
8 show InSummarySource; | 8 show InSummarySource; |
9 import 'package:args/args.dart' show ArgParser, ArgResults; | 9 import 'package:args/args.dart' show ArgParser, ArgResults; |
10 import 'package:args/command_runner.dart' show UsageException; | 10 import 'package:args/command_runner.dart' show UsageException; |
11 import 'package:path/path.dart' as path; | 11 import 'package:path/path.dart' as path; |
12 | 12 |
13 import '../analyzer/context.dart' show AnalyzerOptions; | 13 import '../analyzer/context.dart' show AnalyzerOptions, parseDeclaredVariables; |
14 import 'compiler.dart' show BuildUnit, CompilerOptions, ModuleCompiler; | 14 import 'compiler.dart' show BuildUnit, CompilerOptions, ModuleCompiler; |
15 import 'module_builder.dart'; | 15 import 'module_builder.dart'; |
16 | 16 |
17 final ArgParser _argParser = () { | 17 final ArgParser _argParser = () { |
18 var argParser = new ArgParser(allowTrailingOptions: true) | 18 var argParser = new ArgParser(allowTrailingOptions: true) |
19 ..addFlag('help', abbr: 'h', help: 'Display this message.') | 19 ..addFlag('help', abbr: 'h', help: 'Display this message.') |
20 ..addOption('out', | 20 ..addOption('out', |
21 abbr: 'o', allowMultiple: true, help: 'Output file (required).') | 21 abbr: 'o', allowMultiple: true, help: 'Output file (required).') |
22 ..addOption('module-root', | 22 ..addOption('module-root', |
23 help: 'Root module directory.\n' | 23 help: 'Root module directory.\n' |
(...skipping 10 matching lines...) Expand all Loading... |
34 }(); | 34 }(); |
35 | 35 |
36 /// Runs a single compile for dartdevc. | 36 /// Runs a single compile for dartdevc. |
37 /// | 37 /// |
38 /// This handles argument parsing, usage, error handling. | 38 /// This handles argument parsing, usage, error handling. |
39 /// See bin/dartdevc.dart for the actual entry point, which includes Bazel | 39 /// See bin/dartdevc.dart for the actual entry point, which includes Bazel |
40 /// worker support. | 40 /// worker support. |
41 int compile(List<String> args, {void printFn(Object obj)}) { | 41 int compile(List<String> args, {void printFn(Object obj)}) { |
42 printFn ??= print; | 42 printFn ??= print; |
43 ArgResults argResults; | 43 ArgResults argResults; |
| 44 var declaredVars = <String, String>{}; |
44 try { | 45 try { |
45 argResults = _argParser.parse(args); | 46 argResults = _argParser.parse(parseDeclaredVariables(args, declaredVars)); |
46 } on FormatException catch (error) { | 47 } on FormatException catch (error) { |
47 printFn('$error\n\n$_usageMessage'); | 48 printFn('$error\n\n$_usageMessage'); |
48 return 64; | 49 return 64; |
49 } | 50 } |
50 try { | 51 try { |
51 _compile(argResults, printFn); | 52 _compile(argResults, declaredVars, printFn); |
52 return 0; | 53 return 0; |
53 } on UsageException catch (error) { | 54 } on UsageException catch (error) { |
54 // Incorrect usage, input file not found, etc. | 55 // Incorrect usage, input file not found, etc. |
55 printFn(error); | 56 printFn(error); |
56 return 64; | 57 return 64; |
57 } on CompileErrorException catch (error) { | 58 } on CompileErrorException catch (error) { |
58 // Code has error(s) and failed to compile. | 59 // Code has error(s) and failed to compile. |
59 printFn(error); | 60 printFn(error); |
60 return 1; | 61 return 1; |
61 } catch (error, stackTrace) { | 62 } catch (error, stackTrace) { |
(...skipping 21 matching lines...) Expand all Loading... |
83 | 84 |
84 bool _changed(List<int> list1, List<int> list2) { | 85 bool _changed(List<int> list1, List<int> list2) { |
85 var length = list1.length; | 86 var length = list1.length; |
86 if (length != list2.length) return true; | 87 if (length != list2.length) return true; |
87 for (var i = 0; i < length; ++i) { | 88 for (var i = 0; i < length; ++i) { |
88 if (list1[i] != list2[i]) return true; | 89 if (list1[i] != list2[i]) return true; |
89 } | 90 } |
90 return false; | 91 return false; |
91 } | 92 } |
92 | 93 |
93 void _compile(ArgResults argResults, void printFn(Object obj)) { | 94 void _compile(ArgResults argResults, Map<String, String> declaredVars, |
| 95 void printFn(Object obj)) { |
94 if (argResults['help']) { | 96 if (argResults['help']) { |
95 printFn(_usageMessage); | 97 printFn(_usageMessage); |
96 return; | 98 return; |
97 } | 99 } |
98 var compiler = | 100 var compiler = new ModuleCompiler( |
99 new ModuleCompiler(new AnalyzerOptions.fromArguments(argResults)); | 101 new AnalyzerOptions.fromArguments(argResults, declaredVars)); |
100 var compilerOpts = new CompilerOptions.fromArguments(argResults); | 102 var compilerOpts = new CompilerOptions.fromArguments(argResults); |
101 var outPaths = argResults['out'] as List<String>; | 103 var outPaths = argResults['out'] as List<String>; |
102 var moduleFormats = parseModuleFormatOption(argResults); | 104 var moduleFormats = parseModuleFormatOption(argResults); |
103 bool singleOutFile = argResults['single-out-file']; | 105 bool singleOutFile = argResults['single-out-file']; |
104 if (singleOutFile) { | 106 if (singleOutFile) { |
105 for (var format in moduleFormats) { | 107 for (var format in moduleFormats) { |
106 if (format != ModuleFormat.amd && format != ModuleFormat.legacy) { | 108 if (format != ModuleFormat.amd && format != ModuleFormat.legacy) { |
107 _usageException('Format $format cannot be combined with ' | 109 _usageException('Format $format cannot be combined with ' |
108 'single-out-file. Only amd and legacy modes are supported.'); | 110 'single-out-file. Only amd and legacy modes are supported.'); |
109 } | 111 } |
(...skipping 94 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
204 '\n\n${_argParser.usage}'; | 206 '\n\n${_argParser.usage}'; |
205 | 207 |
206 void _usageException(String message) { | 208 void _usageException(String message) { |
207 throw new UsageException(message, _usageMessage); | 209 throw new UsageException(message, _usageMessage); |
208 } | 210 } |
209 | 211 |
210 /// Thrown when the input source code has errors. | 212 /// Thrown when the input source code has errors. |
211 class CompileErrorException implements Exception { | 213 class CompileErrorException implements Exception { |
212 toString() => '\nPlease fix all errors before compiling (warnings are okay).'; | 214 toString() => '\nPlease fix all errors before compiling (warnings are okay).'; |
213 } | 215 } |
OLD | NEW |