Skip to content

Commit fa3721e

Browse files
committed
Refactor updates to PreprocessorConfiguration
Every update to a PreprocessorConfiguration extends the same three lists, resulting in quite a lot of duplicated code in the original implementation. Signed-off-by: John Pennycook <john.pennycook@intel.com>
1 parent 34d129f commit fa3721e

File tree

1 file changed

+35
-33
lines changed

1 file changed

+35
-33
lines changed

codebasin/config.py

Lines changed: 35 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -269,6 +269,21 @@ class PreprocessorConfiguration:
269269
include_files: list[str]
270270
pass_name: str = "default"
271271

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+
272287

273288
class ArgumentParser:
274289
"""
@@ -397,42 +412,29 @@ def parse_args(self, argv: list[str]) -> list[PreprocessorConfiguration]:
397412
# Convert the arguments into a list of preprocessor configurations.
398413
configurations = []
399414
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+
)
403421

404422
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
414424
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)
436438

437439
return configurations
438440

0 commit comments

Comments
 (0)