summaryrefslogtreecommitdiff
path: root/src/codegen
diff options
context:
space:
mode:
authorZuhaitz Méndez Fernández de Aránguiz <zuhaitz@debian>2026-01-17 18:09:31 +0000
committerZuhaitz Méndez Fernández de Aránguiz <zuhaitz@debian>2026-01-17 18:09:31 +0000
commit7ac5be7ba8f700f69009c5e980ee7b12b0653586 (patch)
tree85c44ed59d768d0bae8849b4590655b82a2a8c57 /src/codegen
parent661a71defc66cfeea1681dddd944ba017087f78a (diff)
Fix for #60
Diffstat (limited to 'src/codegen')
-rw-r--r--src/codegen/codegen.h1
-rw-r--r--src/codegen/codegen_decl.c11
-rw-r--r--src/codegen/codegen_main.c3
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)
{