@@ -269,6 +269,21 @@ class PreprocessorConfiguration:
269
269
include_files : list [str ]
270
270
pass_name : str = "default"
271
271
272
+ def _update (self , pass_or_mode : _CompilerPass | _CompilerMode ):
273
+ """
274
+ Update this PreprocessorConfiguration by extending the
275
+ defines, include paths and include files using the values
276
+ contained in the provided _CompilerPass or _CompilerMode.
277
+
278
+ Parameters
279
+ ----------
280
+ pass_or_mode: _CompilerPass | _CompilerMode
281
+ The pass or mode to enable.
282
+ """
283
+ self .defines .extend (pass_or_mode .defines )
284
+ self .include_paths .extend (pass_or_mode .include_paths )
285
+ self .include_files .extend (pass_or_mode .include_files )
286
+
272
287
273
288
class ArgumentParser :
274
289
"""
@@ -397,42 +412,29 @@ def parse_args(self, argv: list[str]) -> list[PreprocessorConfiguration]:
397
412
# Convert the arguments into a list of preprocessor configurations.
398
413
configurations = []
399
414
for pass_name in args .passes :
400
- defines = args .defines .copy ()
401
- include_files = args .include_files .copy ()
402
- include_paths = args .include_paths .copy ()
415
+ config = PreprocessorConfiguration (
416
+ args .defines .copy (),
417
+ args .include_paths .copy (),
418
+ args .include_files .copy (),
419
+ pass_name ,
420
+ )
403
421
404
422
if pass_name == "default" :
405
- for mode_name in args .modes :
406
- if mode_name not in self .compiler .modes :
407
- log .warning (f"Unrecognized compiler mode: { mode_name } " )
408
- continue
409
- mode = self .compiler .modes [mode_name ]
410
- defines .extend (mode .defines )
411
- include_paths .extend (mode .include_paths )
412
- include_files .extend (mode .include_files )
413
-
423
+ modes = args .modes
414
424
else :
415
- pass_ = self .compiler .passes [pass_name ]
416
- defines .extend (pass_ .defines )
417
- include_paths .extend (pass_ .include_paths )
418
- include_files .extend (pass_ .include_files )
419
- for mode_name in pass_ .modes :
420
- if mode_name not in self .compiler .modes :
421
- log .warning (f"Unrecognized compiler mode: { mode_name } " )
422
- continue
423
- mode = self .compiler .modes [mode_name ]
424
- defines .extend (mode .defines )
425
- include_paths .extend (mode .include_paths )
426
- include_files .extend (mode .include_files )
427
-
428
- configuration = PreprocessorConfiguration (
429
- defines ,
430
- include_paths ,
431
- include_files ,
432
- pass_name = pass_name ,
433
- )
434
-
435
- configurations .append (configuration )
425
+ if pass_name not in self .compiler .passes :
426
+ log .error (f"Unrecognized compiler pass: { pass_name } " )
427
+ continue
428
+ config ._update (self .compiler .passes [pass_name ])
429
+ modes = self .compiler .passes [pass_name ].modes
430
+
431
+ for mode_name in modes :
432
+ if mode_name not in self .compiler .modes :
433
+ log .error (f"Unrecognized compiler mode: { mode_name } " )
434
+ continue
435
+ config ._update (self .compiler .modes [mode_name ])
436
+
437
+ configurations .append (config )
436
438
437
439
return configurations
438
440
0 commit comments