Skip to content

modules

Classes:

ModuleVisitorMixin

Bases: VisitorMixinBase

Methods:

visit

visit(node: StructDefStmt) -> None
Source code in src/irx/builders/llvmliteir/visitors/modules.py
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
@VisitorCore.visit.dispatch
def visit(self, node: astx.StructDefStmt) -> None:
    """
    title: Visit StructDefStmt nodes.
    parameters:
      node:
        type: astx.StructDefStmt
    """
    struct_type = self._llvm.module.context.get_identified_type(node.name)
    if not struct_type.is_opaque:
        raise ValueError(f"Struct '{node.name}' already defined.")

    field_types: list[ir.Type] = []
    for attr in node.attributes:
        type_str = attr.type_.__class__.__name__.lower()
        field_types.append(self._llvm.get_data_type(type_str))

    struct_type.set_body(*field_types)
    self.struct_types[node.name] = struct_type