summaryrefslogtreecommitdiff
path: root/src/codegen/codegen.c
diff options
context:
space:
mode:
authorZuhaitz Méndez Fernández de Aránguiz <zuhaitz@debian>2026-01-23 12:22:57 +0000
committerZuhaitz Méndez Fernández de Aránguiz <zuhaitz@debian>2026-01-23 12:22:57 +0000
commitf73df8d5de30a7f3f320fccf5f57c13094940a6a (patch)
tree877fda85fa3c4a906d6943ac7b7836886bc4140a /src/codegen/codegen.c
parent98623f2fdd63232edf0ebab1b9680cf4e33e6f10 (diff)
Variadic functions + more docs
Diffstat (limited to 'src/codegen/codegen.c')
-rw-r--r--src/codegen/codegen.c28
1 files changed, 28 insertions, 0 deletions
diff --git a/src/codegen/codegen.c b/src/codegen/codegen.c
index 3a93f91..22cbc15 100644
--- a/src/codegen/codegen.c
+++ b/src/codegen/codegen.c
@@ -896,6 +896,34 @@ void codegen_expression(ParserContext *ctx, ASTNode *node, FILE *out)
fprintf(out, ")");
}
break;
+ case NODE_VA_START:
+ fprintf(out, "va_start(");
+ codegen_expression(ctx, node->va_start.ap, out);
+ fprintf(out, ", ");
+ codegen_expression(ctx, node->va_start.last_arg, out);
+ fprintf(out, ")");
+ break;
+ case NODE_VA_END:
+ fprintf(out, "va_end(");
+ codegen_expression(ctx, node->va_end.ap, out);
+ fprintf(out, ")");
+ break;
+ case NODE_VA_COPY:
+ fprintf(out, "va_copy(");
+ codegen_expression(ctx, node->va_copy.dest, out);
+ fprintf(out, ", ");
+ codegen_expression(ctx, node->va_copy.src, out);
+ fprintf(out, ")");
+ break;
+ case NODE_VA_ARG:
+ {
+ char *type_str = codegen_type_to_string(node->va_arg.type_info);
+ fprintf(out, "va_arg(");
+ codegen_expression(ctx, node->va_arg.ap, out);
+ fprintf(out, ", %s)", type_str);
+ free(type_str);
+ break;
+ }
case NODE_EXPR_CAST:
fprintf(out, "(%s)(", node->cast.target_type);
codegen_expression(ctx, node->cast.expr, out);