mirror of
https://github.com/vlang/v.git
synced 2025-09-18 11:56:57 -04:00
cgen: fix comptime selector of interface (#20876)
This commit is contained in:
parent
c60a869fb4
commit
0b792c541a
@ -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) {
|
||||
|
@ -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
|
16
vlib/v/slow_tests/inout/comptime_selector_of_interface.vv
Normal file
16
vlib/v/slow_tests/inout/comptime_selector_of_interface.vv
Normal 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))
|
||||
}
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user