summaryrefslogtreecommitdiff
path: root/src/codegen/codegen_utils.c
diff options
context:
space:
mode:
authorZuhaitz Méndez Fernández de Aránguiz <zuhaitz@debian>2026-01-31 01:15:25 +0000
committerZuhaitz Méndez Fernández de Aránguiz <zuhaitz@debian>2026-01-31 01:15:25 +0000
commit856c9fe56b412779e045ef86a767b93d5c7f563b (patch)
tree6f851bb9bf300970c4a0d7186db0de86e510a18d /src/codegen/codegen_utils.c
parent03a6a57f500ee4230ce2cee887866b3850ed7ed9 (diff)
Improvements for slice + better iteration for arrays
Diffstat (limited to 'src/codegen/codegen_utils.c')
-rw-r--r--src/codegen/codegen_utils.c25
1 files changed, 20 insertions, 5 deletions
diff --git a/src/codegen/codegen_utils.c b/src/codegen/codegen_utils.c
index 0d03661..8d9cb28 100644
--- a/src/codegen/codegen_utils.c
+++ b/src/codegen/codegen_utils.c
@@ -64,13 +64,28 @@ void emit_c_decl(FILE *out, const char *type_str, const char *name)
}
else if (generic && (!bracket || generic < bracket))
{
- // Strip generic part for C output
- int base_len = generic - type_str;
- fprintf(out, "%.*s %s", base_len, type_str, name);
+ char *gt = strchr(generic, '>');
+ if (gt)
+ {
+ int base_len = generic - type_str;
+ int arg_len = gt - generic - 1;
+
+ fprintf(out, "%.*s_%.*s %s", base_len, type_str, arg_len, generic + 1, name);
- if (bracket)
+ if (bracket)
+ {
+ fprintf(out, "%s", bracket);
+ }
+ }
+ else
{
- fprintf(out, "%s", bracket);
+ int base_len = generic - type_str;
+ fprintf(out, "%.*s %s", base_len, type_str, name);
+
+ if (bracket)
+ {
+ fprintf(out, "%s", bracket);
+ }
}
}
else if (bracket)