aboutsummaryrefslogtreecommitdiff
path: root/src/codegen/c.zig
diff options
context:
space:
mode:
authorVeikka Tuominen <git@vexu.eu>2021-01-29 12:19:10 +0200
committerVeikka Tuominen <git@vexu.eu>2021-03-06 15:55:29 +0200
commit8c6e7fb2c7488faab0c41a4ea241f0110237ce91 (patch)
treed4ca1d9e3c6a335caf311de1383e45758f221438 /src/codegen/c.zig
parent17e6e09285ed29ead1a3de5d5bfeb4d287f23215 (diff)
downloadzig-8c6e7fb2c7488faab0c41a4ea241f0110237ce91.tar.gz
zig-8c6e7fb2c7488faab0c41a4ea241f0110237ce91.zip
stage2: implement var args
Diffstat (limited to 'src/codegen/c.zig')
-rw-r--r--src/codegen/c.zig9
1 files changed, 7 insertions, 2 deletions
diff --git a/src/codegen/c.zig b/src/codegen/c.zig
index a885b984ac..1a323441d9 100644
--- a/src/codegen/c.zig
+++ b/src/codegen/c.zig
@@ -215,8 +215,9 @@ pub const DeclGen = struct {
try dg.renderType(w, tv.ty.fnReturnType());
const decl_name = mem.span(dg.decl.name);
try w.print(" {s}(", .{decl_name});
- var param_len = tv.ty.fnParamLen();
- if (param_len == 0)
+ const param_len = tv.ty.fnParamLen();
+ const is_var_args = tv.ty.fnIsVarArgs();
+ if (param_len == 0 and !is_var_args)
try w.writeAll("void")
else {
var index: usize = 0;
@@ -228,6 +229,10 @@ pub const DeclGen = struct {
try w.print(" a{d}", .{index});
}
}
+ if (is_var_args) {
+ if (param_len != 0) try w.writeAll(", ");
+ try w.writeAll("...");
+ }
try w.writeByte(')');
}