diff options
| author | Zuhaitz Méndez Fernández de Aránguiz <zuhaitz@debian> | 2026-01-20 23:03:33 +0000 |
|---|---|---|
| committer | Zuhaitz Méndez Fernández de Aránguiz <zuhaitz@debian> | 2026-01-20 23:03:33 +0000 |
| commit | dce95614b91b8975ca4174355be006a2f1ad7ffe (patch) | |
| tree | 1cbfc8c92cacf43981bf254d3e495e8f6a3d962d /src/codegen/codegen.c | |
| parent | 7d3fb0f38333996f93ac9af190eefe5ca663cb70 (diff) | |
Fix for 'tests/features/test_iterator_drop.zc'
Diffstat (limited to 'src/codegen/codegen.c')
| -rw-r--r-- | src/codegen/codegen.c | 24 |
1 files changed, 20 insertions, 4 deletions
diff --git a/src/codegen/codegen.c b/src/codegen/codegen.c index c6211ad..b2f1ad1 100644 --- a/src/codegen/codegen.c +++ b/src/codegen/codegen.c @@ -1783,7 +1783,6 @@ void codegen_node_single(ParserContext *ctx, ASTNode *node, FILE *out) } { char *tname = NULL; - // Use type_info with codegen_type_to_string if available if (node->type_info) { tname = codegen_type_to_string(node->type_info); @@ -1795,11 +1794,16 @@ void codegen_node_single(ParserContext *ctx, ASTNode *node, FILE *out) if (tname) { - // Cleanup attribute - ASTNode *def = find_struct_def(ctx, tname); + char *clean_type = tname; + if (strncmp(clean_type, "struct ", 7) == 0) + { + clean_type += 7; + } + + ASTNode *def = find_struct_def(ctx, clean_type); if (def && def->type_info && def->type_info->traits.has_drop) { - fprintf(out, "__attribute__((cleanup(%s__Drop_glue))) ", tname); + fprintf(out, "__attribute__((cleanup(%s__Drop_glue))) ", clean_type); } // Emit Variable with Type @@ -1829,6 +1833,18 @@ void codegen_node_single(ParserContext *ctx, ASTNode *node, FILE *out) if (inferred && strcmp(inferred, "__auto_type") != 0) { + char *clean_type = inferred; + if (strncmp(clean_type, "struct ", 7) == 0) + { + clean_type += 7; + } + + ASTNode *def = find_struct_def(ctx, clean_type); + if (def && def->type_info && def->type_info->traits.has_drop) + { + fprintf(out, "__attribute__((cleanup(%s__Drop_glue))) ", clean_type); + } + emit_var_decl_type(ctx, out, inferred, node->var_decl.name); add_symbol(ctx, node->var_decl.name, inferred, NULL); fprintf(out, " = "); |
