diff options
Diffstat (limited to 'codegen.c')
| -rw-r--r-- | codegen.c | 9 |
1 files changed, 4 insertions, 5 deletions
@@ -61,9 +61,9 @@ static void emit_var_ref( CGEN_PANIC("reference to undefined variable %s", node->ident); fprintf(outfile, "\tmov "); - emit_storage_loc(outfile, &var_def.loc); - fprintf(outfile, ", "); emit_storage_loc(outfile, storage); + fprintf(outfile, ", "); + emit_storage_loc(outfile, &var_def.loc); fprintf(outfile, "\n"); } } @@ -171,19 +171,18 @@ static void emit_fn_decl(FILE* outfile, const struct fn_decl_node* node) { scope->bp_offset = 0; struct var_decl_node* args_node = node->args_head; - long long arg_bp_offset = -8; while (args_node != NULL) { unsigned long long type_sz = get_type_size(&args_node->type); + scope->bp_offset += type_sz; scope_define_var(scope, (struct var_def) { .name = args_node->ident, .loc = { .type = BP_OFFSET, - .offset = arg_bp_offset, + .offset = scope->bp_offset, }, }); - arg_bp_offset -= type_sz; args_node = args_node->next; } |
