mirror of
https://github.com/vlang/v.git
synced 2025-09-13 14:32:26 +03:00
This commit is contained in:
parent
6cbffd53ba
commit
42638cb171
2 changed files with 24 additions and 1 deletions
|
@ -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)
|
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_cc_type := g.cc_type(g.table.unaliased_type(receiver.typ), false)
|
||||||
left_type_name := util.no_dots(left_cc_type)
|
left_type_name := util.no_dots(left_cc_type)
|
||||||
sb.write_string('${c_name(left_type_name)}_name_table[a0->_typ]._method_${method_name}(')
|
sb.write_string('${c_name(left_type_name)}_name_table[a0->_typ]._method_${method_name}(')
|
||||||
|
|
23
vlib/v/tests/interfaces/interface_method_closure_test.v
Normal file
23
vlib/v/tests/interfaces/interface_method_closure_test.v
Normal 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'
|
||||||
|
}
|
Loading…
Add table
Add a link
Reference in a new issue