diff options
| author | Zuhaitz Méndez Fernández de Aránguiz <zuhaitz@debian> | 2026-01-25 13:44:24 +0000 |
|---|---|---|
| committer | Zuhaitz Méndez Fernández de Aránguiz <zuhaitz@debian> | 2026-01-25 13:44:24 +0000 |
| commit | 0bd7b99fbf813415b9a0217eaa2a4e8f6f74e1ea (patch) | |
| tree | 1328e02c6f87580fb9542c75bfa214c389fe1ca2 /src/codegen/codegen.c | |
| parent | 7fea57bdddde04090cc95112b47d0a1a86c341bc (diff) | |
Fix for #111
Diffstat (limited to 'src/codegen/codegen.c')
| -rw-r--r-- | src/codegen/codegen.c | 26 |
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; |
