From e4a1bc33759f2bc39379a93002ac632741cb5f8a Mon Sep 17 00:00:00 2001 From: Baitinq Date: Tue, 25 Mar 2025 00:21:56 +0100 Subject: Feature: Add basic support for varargs --- src/codegen.zig | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) (limited to 'src') diff --git a/src/codegen.zig b/src/codegen.zig index fc956a5..d9312a3 100644 --- a/src/codegen.zig +++ b/src/codegen.zig @@ -524,10 +524,15 @@ pub const CodeGen = struct { .FUNCTION_TYPE => |t| { const return_type = try self.get_llvm_type(t.return_type); var paramtypes = std.ArrayList(llvm.LLVMTypeRef).init(self.arena); + var is_varargs: i8 = 0; for (t.parameters) |param| { + if (param.TYPE == .SIMPLE_TYPE and std.mem.eql(u8, param.TYPE.SIMPLE_TYPE.name, "varargs")) { + is_varargs = 1; + continue; + } try paramtypes.append(try self.get_llvm_type(param)); } - const function_type = llvm.LLVMFunctionType(return_type, paramtypes.items.ptr, @intCast(paramtypes.items.len), 0) orelse unreachable; + const function_type = llvm.LLVMFunctionType(return_type, paramtypes.items.ptr, @intCast(paramtypes.items.len), is_varargs) orelse unreachable; return function_type; }, .POINTER_TYPE => |t| { -- cgit 1.4.1