From f73df8d5de30a7f3f320fccf5f57c13094940a6a Mon Sep 17 00:00:00 2001 From: Zuhaitz Méndez Fernández de Aránguiz Date: Fri, 23 Jan 2026 12:22:57 +0000 Subject: Variadic functions + more docs --- src/codegen/codegen.c | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) (limited to 'src/codegen') 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); -- cgit v1.2.3