diff options
| author | Zuhaitz Méndez Fernández de Aránguiz <zuhaitz@debian> | 2026-01-23 12:22:57 +0000 |
|---|---|---|
| committer | Zuhaitz Méndez Fernández de Aránguiz <zuhaitz@debian> | 2026-01-23 12:22:57 +0000 |
| commit | f73df8d5de30a7f3f320fccf5f57c13094940a6a (patch) | |
| tree | 877fda85fa3c4a906d6943ac7b7836886bc4140a /src/codegen | |
| parent | 98623f2fdd63232edf0ebab1b9680cf4e33e6f10 (diff) | |
Variadic functions + more docs
Diffstat (limited to 'src/codegen')
| -rw-r--r-- | src/codegen/codegen.c | 28 |
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); |
