Skip to content

Commit 44c3fce

Browse files
authored
cgen: fix reference embed method call (#15842)
1 parent 78f8b9e commit 44c3fce

File tree

2 files changed

+33
-0
lines changed

2 files changed

+33
-0
lines changed

vlib/v/gen/c/fn.v

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1086,6 +1086,16 @@ fn (mut g Gen) method_call(node ast.CallExpr) {
10861086
g.write('(map[]){')
10871087
g.expr(node.left)
10881088
g.write('}[0]')
1089+
} else if node.from_embed_types.len > 0 {
1090+
n_ptr := node.left_type.nr_muls() - 1
1091+
if n_ptr > 0 {
1092+
g.write('(')
1093+
g.write('*'.repeat(n_ptr))
1094+
g.expr(node.left)
1095+
g.write(')')
1096+
} else {
1097+
g.expr(node.left)
1098+
}
10891099
} else {
10901100
g.expr(node.left)
10911101
}

vlib/v/tests/embed_method_call_test.v

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
struct Access {}
2+
3+
fn (access &Access) acc() bool {
4+
return true
5+
}
6+
7+
struct Field {
8+
Access
9+
}
10+
11+
fn test_embed_method_call() {
12+
mut fields := []&Field{}
13+
fields << &Field{}
14+
15+
mut rets := []bool{}
16+
for mut field in fields {
17+
println(field.acc())
18+
rets << field.acc()
19+
}
20+
21+
assert rets.len == 1
22+
assert rets[0]
23+
}

0 commit comments

Comments
 (0)