diff options
| author | Zuhaitz Méndez Fernández de Aránguiz <zuhaitz@debian> | 2026-01-17 18:09:31 +0000 |
|---|---|---|
| committer | Zuhaitz Méndez Fernández de Aránguiz <zuhaitz@debian> | 2026-01-17 18:09:31 +0000 |
| commit | 7ac5be7ba8f700f69009c5e980ee7b12b0653586 (patch) | |
| tree | 85c44ed59d768d0bae8849b4590655b82a2a8c57 /src/codegen | |
| parent | 661a71defc66cfeea1681dddd944ba017087f78a (diff) | |
Fix for #60
Diffstat (limited to 'src/codegen')
| -rw-r--r-- | src/codegen/codegen.h | 1 | ||||
| -rw-r--r-- | src/codegen/codegen_decl.c | 11 | ||||
| -rw-r--r-- | src/codegen/codegen_main.c | 3 |
3 files changed, 14 insertions, 1 deletions
diff --git a/src/codegen/codegen.h b/src/codegen/codegen.h index 45a00ed..c6e2836 100644 --- a/src/codegen/codegen.h +++ b/src/codegen/codegen.h @@ -28,6 +28,7 @@ void emit_func_signature(FILE *out, ASTNode *func, const char *name_override); // Declaration emission (codegen_decl.c). void emit_preamble(ParserContext *ctx, FILE *out); void emit_includes_and_aliases(ASTNode *node, FILE *out); +void emit_type_aliases(ASTNode *node, FILE *out); void emit_struct_defs(ParserContext *ctx, ASTNode *node, FILE *out); void emit_trait_defs(ASTNode *node, FILE *out); void emit_enum_protos(ASTNode *node, FILE *out); diff --git a/src/codegen/codegen_decl.c b/src/codegen/codegen_decl.c index e42d83b..6f9a1cb 100644 --- a/src/codegen/codegen_decl.c +++ b/src/codegen/codegen_decl.c @@ -207,7 +207,16 @@ void emit_includes_and_aliases(ASTNode *node, FILE *out) fprintf(out, "#include \"%s\"\n", node->include.path); } } - else if (node->type == NODE_TYPE_ALIAS) + node = node->next; + } +} + +// Emit type aliases (after struct defs so the aliased types exist) +void emit_type_aliases(ASTNode *node, FILE *out) +{ + while (node) + { + if (node->type == NODE_TYPE_ALIAS) { fprintf(out, "typedef %s %s;\n", node->type_alias.original_type, node->type_alias.alias); diff --git a/src/codegen/codegen_main.c b/src/codegen/codegen_main.c index ea90131..c86b6c9 100644 --- a/src/codegen/codegen_main.c +++ b/src/codegen/codegen_main.c @@ -341,6 +341,9 @@ void codegen_node(ParserContext *ctx, ASTNode *node, FILE *out) emit_struct_defs(ctx, sorted, out); } + // Emit type aliases after struct defs (so aliased generic types exist) + emit_type_aliases(kids, out); + ASTNode *raw_iter = kids; while (raw_iter) { |
