summaryrefslogtreecommitdiff
path: root/src/codegen
diff options
context:
space:
mode:
authorZuhaitz Méndez Fernández de Aránguiz <zuhaitz@debian>2026-01-25 13:44:24 +0000
committerZuhaitz Méndez Fernández de Aránguiz <zuhaitz@debian>2026-01-25 13:44:24 +0000
commit0bd7b99fbf813415b9a0217eaa2a4e8f6f74e1ea (patch)
tree1328e02c6f87580fb9542c75bfa214c389fe1ca2 /src/codegen
parent7fea57bdddde04090cc95112b47d0a1a86c341bc (diff)
Fix for #111
Diffstat (limited to 'src/codegen')
-rw-r--r--src/codegen/codegen.c26
1 files changed, 26 insertions, 0 deletions
diff --git a/src/codegen/codegen.c b/src/codegen/codegen.c
index b375bbb..689c4dc 100644
--- a/src/codegen/codegen.c
+++ b/src/codegen/codegen.c
@@ -464,6 +464,32 @@ void codegen_expression(ParserContext *ctx, ASTNode *node, FILE *out)
ref = ref->next;
}
+ if (!resolved_method_suffix)
+ {
+ GenericImplTemplate *it = ctx->impl_templates;
+ while (it)
+ {
+ char *tname = NULL;
+ if (it->impl_node && it->impl_node->type == NODE_IMPL_TRAIT)
+ {
+ tname = it->impl_node->impl_trait.trait_name;
+ }
+ if (tname)
+ {
+ char trait_mangled[512];
+ sprintf(trait_mangled, "%s__%s_%s", base, tname, method);
+ if (find_func(ctx, trait_mangled))
+ {
+ char *suffix = xmalloc(strlen(tname) + strlen(method) + 2);
+ sprintf(suffix, "%s_%s", tname, method);
+ resolved_method_suffix = suffix;
+ break;
+ }
+ }
+ it = it->next;
+ }
+ }
+
if (resolved_method_suffix)
{
method = resolved_method_suffix;