def __init__(self, function, param_types): module = Module() func_def = ast.parse(inspect.getsource(function)).body[0] self.function, self.retval = module.compile_function( func_def, param_types) self.argval = [param_types[arg.arg] for arg in func_def.args.args] self.ee = module.get_ee()
def __init__(self, function, param_types): module = Module() func_def = ast.parse(inspect.getsource(function)).body[0] function, retval = module.compile_function(func_def, param_types) argvals = [param_types[arg.arg] for arg in func_def.args.args] ee = module.get_ee() cfptr = ee.get_pointer_to_global(module.llvm_module_ref.get_function(function.name)) retval_ctype = _value_to_ctype(retval) argval_ctypes = [_value_to_ctype(argval) for argval in argvals] self.cfunc = CFUNCTYPE(retval_ctype, *argval_ctypes)(cfptr) # HACK: prevent garbage collection of self.cfunc internals self.ee = ee
def __init__(self, function, param_types): module = Module() func_def = ast.parse(inspect.getsource(function)).body[0] function, retval = module.compile_function(func_def, param_types) argvals = [param_types[arg.arg] for arg in func_def.args.args] ee = module.get_ee() cfptr = ee.get_pointer_to_global( module.llvm_module_ref.get_function(function.name)) retval_ctype = _value_to_ctype(retval) argval_ctypes = [_value_to_ctype(argval) for argval in argvals] self.cfunc = CFUNCTYPE(retval_ctype, *argval_ctypes)(cfptr) # HACK: prevent garbage collection of self.cfunc internals self.ee = ee
def get_runtime_binary(env, func_def): module = Module(env) module.compile_function(func_def, dict()) return module.emit_object()