File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change @@ -605,7 +605,6 @@ fn (mut g Gen) gen_interface_equality_fn(left_type ast.Type) string {
605605 left_arg := g.read_field (left_type, '_typ' , 'a' )
606606 right_arg := g.read_field (left_type, '_typ' , 'b' )
607607
608- fn_builder.writeln ('${g .static_non_parallel }int v_typeof_interface_idx_${idx_fn }(int sidx); // for auto eq method' )
609608 fn_builder.writeln ('${g .static_non_parallel }inline bool ${fn_name }_interface_eq(${ptr_styp } a, ${ptr_styp } b) {' )
610609 fn_builder.writeln ('\t if (${left_arg } == ${right_arg }) {' )
611610 fn_builder.writeln ('\t\t int idx = v_typeof_interface_idx_${idx_fn }(${left_arg });' )
Original file line number Diff line number Diff line change @@ -1157,6 +1157,7 @@ pub fn (mut g Gen) write_typeof_functions() {
11571157 g.writeln ('\t if (sidx == _${sym .cname }_${sub_sym .cname }_index) return "${util .strip_main_name (sub_sym .name )}";' )
11581158 }
11591159 g.writeln2 ('\t return "unknown ${util .strip_main_name (sym .name )}";' , '}' )
1160+ g.definitions.writeln ('int v_typeof_interface_idx_${sym .cname }(int sidx);' )
11601161 g.writeln2 ('' , 'int v_typeof_interface_idx_${sym .cname }(int sidx) {' )
11611162 if g.pref.parallel_cc {
11621163 g.extern_out.writeln ('extern int v_typeof_interface_idx_${sym .cname }(int sidx);' )
Original file line number Diff line number Diff line change 1+ @[heap]
2+ struct Foo {
3+ mut :
4+ val int
5+ }
6+
7+ @[heap]
8+ struct Bar {
9+ mut :
10+ val int
11+ }
12+
13+ interface FooBar {
14+ mut :
15+ val int
16+ }
17+
18+ fn test_interface_as_cast_in_anon_fn () {
19+ mut fbs := []& FooBar{}
20+ fbs << & Foo{1 }
21+ do_something := fn [mut fbs] () {
22+ _ := fbs.last () as Foo // this line works outside of anon fn
23+ }
24+ do_something ()
25+ assert true
26+ }
You can’t perform that action at this time.
0 commit comments