Skip to content

Commit cd5b304

Browse files
authored
cgen: add interface case for gen_struct_equality_fn (#12094)
1 parent a8ace2c commit cd5b304

File tree

2 files changed

+26
-0
lines changed

2 files changed

+26
-0
lines changed

vlib/v/gen/c/auto_eq_methods.v

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -155,6 +155,9 @@ fn (mut g Gen) gen_struct_equality_fn(left_type ast.Type) string {
155155
fn_builder.write_string('${eq_fn}_alias_eq(a.$field_name, b.$field_name)')
156156
} else if field_type.sym.kind == .function {
157157
fn_builder.write_string('*((voidptr*)(a.$field_name)) == *((voidptr*)(b.$field_name))')
158+
} else if field_type.sym.kind == .interface_ {
159+
eq_fn := g.gen_interface_equality_fn(field.typ)
160+
fn_builder.write_string('${eq_fn}_interface_eq(a.$field_name, b.$field_name)')
158161
} else {
159162
fn_builder.write_string('a.$field_name == b.$field_name')
160163
}
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
interface IExample {
2+
thing() bool
3+
}
4+
5+
struct Foo {}
6+
7+
fn (n Foo) thing() bool {
8+
return true
9+
}
10+
11+
struct Test {
12+
a IExample
13+
}
14+
15+
fn new() Test {
16+
return Test{Foo{}}
17+
}
18+
19+
fn test_struct_auto_eq_gen_interface_case() {
20+
w1 := new()
21+
w2 := new()
22+
assert w1 == w2
23+
}

0 commit comments

Comments
 (0)