cgen: fix comptime selector of interface (#20876)

This commit is contained in:
yuyi 2024-02-20 14:35:30 +08:00 committed by GitHub
parent c60a869fb4
commit 0b792c541a
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 28 additions and 0 deletions

View File

@ -10,6 +10,10 @@ import v.pref
import v.comptime
fn (mut g Gen) comptime_selector(node ast.ComptimeSelector) {
is_interface_field := g.table.sym(node.left_type).kind == .interface_
if is_interface_field {
g.write('*(')
}
g.expr(node.left)
if node.left_type.is_ptr() {
g.write('->')
@ -23,11 +27,17 @@ fn (mut g Gen) comptime_selector(node ast.ComptimeSelector) {
&& node.field_expr.field_name == 'name' {
_, field_name := g.comptime.get_comptime_selector_var_type(node)
g.write(c_name(field_name))
if is_interface_field {
g.write(')')
}
return
}
}
}
g.expr(node.field_expr)
if is_interface_field {
g.write(')')
}
}
fn (mut g Gen) comptime_call(mut node ast.ComptimeCall) {

View File

@ -0,0 +1,2 @@
[vlib/v/slow_tests/inout/comptime_selector_of_interface.vv:12] p.count: 42
[vlib/v/slow_tests/inout/comptime_selector_of_interface.vv:14] p.$(f.name): 42

View File

@ -0,0 +1,16 @@
struct People {
count int
}
interface IPeople {
count int
}
fn main() {
p := IPeople(People{42})
dump(p.count)
$for f in IPeople.fields {
dump(p.$(f.name))
}
}