Skip to content

functions

Classes:

FunctionVisitorMixin

Bases: VisitorMixinBase

Methods:

visit

visit(node: FunctionReturn) -> None
Source code in src/irx/builders/llvmliteir/visitors/functions.py
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
@VisitorCore.visit.dispatch
def visit(self, node: astx.FunctionReturn) -> None:
    """
    title: Visit FunctionReturn nodes.
    parameters:
      node:
        type: astx.FunctionReturn
    """
    if node.value is not None:
        self.visit_child(node.value)
        retval = safe_pop(self.result_stack)
    else:
        retval = None

    if retval is not None:
        fn_return_type = (
            self._llvm.ir_builder.function.function_type.return_type
        )
        if is_int_type(fn_return_type) and fn_return_type.width == 1:
            if is_int_type(retval.type) and retval.type.width != 1:
                retval = self._llvm.ir_builder.trunc(retval, ir.IntType(1))
        self._llvm.ir_builder.ret(retval)
        return

    self._llvm.ir_builder.ret_void()