from ScEpTIC.config.base_config import ScEpTICBaseConfig class ProgramConfig(ScEpTICBaseConfig): """ Program configuration """ _config_domain = { 'ir_function_prefix': {'class': str, 'mode': 'set'}, 'main_function_name': {'class': str, 'mode': 'set'}, 'file': {'class': str, 'mode': 'set'} } def __init__(self, main_config): super().__init__(main_config) # LLVM main function name self.ir_function_prefix = '@' # Main self.main_function_name = f"{self.ir_function_prefix}main" # File name self.file = 'source.ll' self._register_config_callback("ir_function_prefix", self._append_prefix_callback) self._register_config_callback("main_function_name", self._append_prefix_callback) def _append_prefix_callback(self, config_name, config_value): """ Callback to append prefix to function names :param config_name: the configuration name :param config_value: the configuration value """ if self.main_function_name[0] != self.ir_function_prefix: self.main_function_name = f"{self.ir_function_prefix}{self.main_function_name}" self._main_config.state_retention._append_prefix_callback(config_name, config_value)