diff options
| author | nsfisis <nsfisis@gmail.com> | 2025-08-13 01:14:35 +0900 |
|---|---|---|
| committer | nsfisis <nsfisis@gmail.com> | 2025-08-15 10:06:21 +0900 |
| commit | 15c8a2f45b3916f840665b317afb344cbc08f5a4 (patch) | |
| tree | 77cfd6866c5100f836adfee8603c122aefaf21b0 /codegen.c | |
| parent | 9c12de31ab03385cea3b7bc78582ef4fdb9b22cc (diff) | |
| download | ducc-15c8a2f45b3916f840665b317afb344cbc08f5a4.tar.gz ducc-15c8a2f45b3916f840665b317afb344cbc08f5a4.tar.zst ducc-15c8a2f45b3916f840665b317afb344cbc08f5a4.zip | |
feat: implement block-based variable scope
Diffstat (limited to 'codegen.c')
| -rw-r--r-- | codegen.c | 14 |
1 files changed, 6 insertions, 8 deletions
@@ -275,11 +275,10 @@ void codegen_assign_expr(CodeGen* g, AstNode* ast) { void codegen_func_call(CodeGen* g, AstNode* ast) { String* func_name = &ast->name; - int i; if (string_equals_cstr(func_name, "va_start")) { printf(" # va_start BEGIN\n"); - for (i = 0; i < 6; ++i) { + for (int i = 0; i < 6; ++i) { printf(" mov rax, %s\n", param_reg(i)); printf(" mov [rbp-%d], rax\n", 8 + (LVAR_MAX - 4 - i) * 8); } @@ -300,11 +299,11 @@ void codegen_func_call(CodeGen* g, AstNode* ast) { } AstNode* args = ast->node_args; - for (i = 0; i < args->node_len; ++i) { + for (int i = 0; i < args->node_len; ++i) { AstNode* arg = args->node_items + i; codegen_expr(g, arg, GenMode_rval); } - for (i = args->node_len - 1; i >= 0; --i) { + for (int i = args->node_len - 1; i >= 0; --i) { printf(" pop %s\n", param_reg(i)); } @@ -529,18 +528,17 @@ void codegen_func(CodeGen* g, AstNode* ast) { void codegen(Program* prog) { CodeGen* g = codegen_new(); - int i; printf(".intel_syntax noprefix\n\n"); printf(".section .rodata\n\n"); - for (i = 0; prog->str_literals[i]; ++i) { + for (int i = 0; prog->str_literals[i]; ++i) { printf(".Lstr__%d:\n", i + 1); printf(" .string \"%s\"\n\n", prog->str_literals[i]); } printf(".bss\n\n"); - for (i = 0; i < prog->vars->node_len; ++i) { + for (int i = 0; i < prog->vars->node_len; ++i) { AstNode* var = prog->vars->node_items + i; printf(" .lcomm %.*s, %d\n", var->name.len, var->name.data, type_sizeof(var->ty)); } @@ -548,7 +546,7 @@ void codegen(Program* prog) { printf(".globl main\n\n"); printf(".text\n\n"); - for (i = 0; i < prog->funcs->node_len; ++i) { + for (int i = 0; i < prog->funcs->node_len; ++i) { AstNode* func = prog->funcs->node_items + i; codegen_func(g, func); } |
