summaryrefslogtreecommitdiff
path: root/src/codegen/codegen_utils.c
diff options
context:
space:
mode:
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)