From e63649bddae63f7df0e94bdaf6fdc9bfeb2cfae2 Mon Sep 17 00:00:00 2001 From: David Gonzalez Martin Date: Sat, 22 Feb 2025 20:27:25 -0600 Subject: [PATCH] Store functions as globals --- src/LLVM.zig | 4 ++++ src/converter.zig | 7 +++++++ 2 files changed, 11 insertions(+) diff --git a/src/LLVM.zig b/src/LLVM.zig index c7bb1b7..d972548 100644 --- a/src/LLVM.zig +++ b/src/LLVM.zig @@ -842,6 +842,10 @@ pub const Type = opaque { pub fn get(return_type: *Type, parameter_types: []const *Type, is_var_args: bool) *Type.Function { return api.LLVMFunctionType(return_type, parameter_types.ptr, @intCast(parameter_types.len), @intFromBool(is_var_args)); } + + pub fn to_type(function_type: *Type.Function) *Type { + return @ptrCast(function_type); + } }; pub const Integer = opaque { diff --git a/src/converter.zig b/src/converter.zig index fab8873..a270f25 100644 --- a/src/converter.zig +++ b/src/converter.zig @@ -944,6 +944,13 @@ pub noinline fn convert(options: ConvertOptions) void { }); handle.set_calling_convention(calling_convention.to_llvm()); + const global = module.globals.add(); + global.* = .{ + .type = Type.new(function_type.to_type(), false), + .storage = handle.to_value(), + .name = global_name, + }; + const entry_block = thread.context.create_basic_block("entry", handle); thread.builder.position_at_end(entry_block);