diff options
| author | Baitinq <[email protected]> | 2025-03-25 00:21:56 +0100 |
|---|---|---|
| committer | Baitinq <[email protected]> | 2025-03-25 00:21:56 +0100 |
| commit | e4a1bc33759f2bc39379a93002ac632741cb5f8a (patch) | |
| tree | 3a089cd55a808fc907b0930cf66c2ce34779f010 /src/codegen.zig | |
| parent | Feature: Add "proper" pointer types (diff) | |
| download | interpreter-e4a1bc33759f2bc39379a93002ac632741cb5f8a.tar.gz interpreter-e4a1bc33759f2bc39379a93002ac632741cb5f8a.tar.bz2 interpreter-e4a1bc33759f2bc39379a93002ac632741cb5f8a.zip | |
Feature: Add basic support for varargs
Diffstat (limited to '')
| -rw-r--r-- | src/codegen.zig | 7 |
1 files changed, 6 insertions, 1 deletions
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| { |