@@ -142,7 +142,8 @@ final summaryArgsParser = new ArgParser()
142
142
..addOption ('used-inputs' )
143
143
..addFlag ('track-widget-creation' , defaultsTo: false )
144
144
..addMultiOption ('enable-experiment' ,
145
- help: 'Enable a language experiment when invoking the CFE.' );
145
+ help: 'Enable a language experiment when invoking the CFE.' )
146
+ ..addMultiOption ('define' , abbr: 'D' );
146
147
147
148
class ComputeKernelResult {
148
149
final bool succeeded;
@@ -166,6 +167,7 @@ Future<ComputeKernelResult> computeKernel(List<String> args,
166
167
fe.InitializedCompilerState previousState}) async {
167
168
dynamic out = outputBuffer ?? stderr;
168
169
bool succeeded = true ;
170
+
169
171
var parsedArgs = summaryArgsParser.parse (args);
170
172
171
173
if (parsedArgs['help' ]) {
@@ -244,6 +246,8 @@ Future<ComputeKernelResult> computeKernel(List<String> args,
244
246
fe.InitializedCompilerState state;
245
247
bool usingIncrementalCompiler = false ;
246
248
bool recordUsedInputs = parsedArgs["used-inputs" ] != null ;
249
+ var environmentDefines = _parseEnvironmentDefines (parsedArgs['define' ]);
250
+
247
251
if (parsedArgs['use-incremental-compiler' ]) {
248
252
usingIncrementalCompiler = true ;
249
253
@@ -286,6 +290,7 @@ Future<ComputeKernelResult> computeKernel(List<String> args,
286
290
fileSystem,
287
291
(parsedArgs['enable-experiment' ] as List <String >),
288
292
summaryOnly,
293
+ environmentDefines,
289
294
trackNeededDillLibraries: recordUsedInputs);
290
295
} else {
291
296
state = await fe.initializeCompiler (
@@ -298,7 +303,8 @@ Future<ComputeKernelResult> computeKernel(List<String> args,
298
303
linkedInputs,
299
304
target,
300
305
fileSystem,
301
- (parsedArgs['enable-experiment' ] as List <String >));
306
+ parsedArgs['enable-experiment' ] as List <String >,
307
+ environmentDefines);
302
308
}
303
309
304
310
void onDiagnostic (fe.DiagnosticMessage message) {
@@ -448,3 +454,20 @@ Uri _toUri(String uriString) {
448
454
// concatenated with Unix-style paths.
449
455
return Uri .base .resolve (uriString.replaceAll ("\\ " , "/" ));
450
456
}
457
+
458
+ Map <String , String > _parseEnvironmentDefines (List <String > args) {
459
+ var environment = < String , String > {};
460
+
461
+ for (var arg in args) {
462
+ var eq = arg.indexOf ('=' );
463
+ if (eq <= 0 ) {
464
+ var kind = eq == 0 ? 'name' : 'value' ;
465
+ throw FormatException ('no $kind given to -D option `$arg `' );
466
+ }
467
+ var name = arg.substring (0 , eq);
468
+ var value = arg.substring (eq + 1 );
469
+ environment[name] = value;
470
+ }
471
+
472
+ return environment;
473
+ }
0 commit comments