def __init__(self, trimming_dict=None, progress_cb=None): self.trimming_dict = trimming_dict self.types_cast_to_void = set() self.progress_cb = progress_cb or (lambda *_: None) self.parser = parser.Parser(type_manager=self) self.variables = {} self.types = types.get_64bit_types() self.functions = functions.get_arithmetic_functions() self.functions.update(functions.get_builtins()) self.expression_evaluator = ( expression_evaluator_visitor.ExpressionEvaluatorVisitor( type_manager=self)) self.dependency_visitor = type_collecting_visitor.DependencyVisitor( type_manager=self) self.field_collector = field_collecting_visitor.FieldCollectingVisitor( type_manager=self) self.layout_computer = layout_computing_visitor.LayoutComputingVisitor( type_manager=self) # Add the constants from the trimming dict. These represent global enum # values. if trimming_dict: self.variables = self.trimming_dict.get("$VARS", {})
def __init__(self, trimming_dict=None, progress_cb=None): self.trimming_dict = trimming_dict self.types_cast_to_void = set() self.progress_cb = progress_cb or (lambda *_: None) self.parser = c_parser.Parser(type_manager=self) self.variables = {} self.types = types.get_64bit_types() self.functions = functions.get_arithmetic_functions() self.functions.update(functions.get_builtins()) self.expression_evaluator = ( expression_evaluator_visitor.ExpressionEvaluatorVisitor( type_manager=self)) self.dependency_visitor = type_collecting_visitor.DependencyVisitor( type_manager=self) self.field_collector = field_collecting_visitor.FieldCollectingVisitor( type_manager=self) self.layout_computer = layout_computing_visitor.LayoutComputingVisitor( type_manager=self) # Add the constants from the trimming dict. These represent global enum # values. if trimming_dict: self.variables = self.trimming_dict.get("$VARS", {})
def _get_layouts_and_types(self, program, layouts_to_compute): """Computes layouts and type definitions from AST tree.""" expression_evaluator = self._get_expression_evaluator() type_collector = type_collecting_visitor.TypeCollectingVisitor( expression_evaluator) types = type_collector.collect_types(program) types.update(types_module.get_64bit_types()) layout_computer = self._get_layout_computer(expression_evaluator, types) def _sizeof(type_name): return layout_computer.compute_layout( types[type_name]).bit_size // 8 # Implement a sizeof function. self.functions_['sizeof'] = _sizeof layouts = {} for name in layouts_to_compute: layouts[name] = layout_computer.compute_layout(types[name]) return layouts, types