cgen: fix codegen for interface method closure get (fix #24810) (#24818)

This commit is contained in:
Felipe Pena 2025-06-30 15:49:38 -03:00 committed by GitHub
parent 6cbffd53ba
commit 42638cb171
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 24 additions and 1 deletions

View file

@ -4473,7 +4473,7 @@ fn (mut g Gen) gen_closure_fn(expr_styp string, m ast.Fn, name string) {
method_name = g.generic_fn_name(rec_sym.info.concrete_types, m.name)
}
}
if rec_sym.info is ast.Interface {
if rec_sym.info is ast.Interface && rec_sym.info.get_methods().contains(method_name) {
left_cc_type := g.cc_type(g.table.unaliased_type(receiver.typ), false)
left_type_name := util.no_dots(left_cc_type)
sb.write_string('${c_name(left_type_name)}_name_table[a0->_typ]._method_${method_name}(')

View file

@ -0,0 +1,23 @@
interface Doer {
job string
}
fn (d Doer) do() string {
return '${d.job}'
}
struct Expector {
do_fn fn () string @[required]
}
struct Actioner {
job string
}
fn test_main() {
a := &Actioner{'dier'}
e := Expector{
do_fn: Doer(a).do
}
assert e.do_fn() == 'dier'
}