mirror of
https://github.com/vlang/v.git
synced 2025-09-15 10:27:19 -04:00
parent
78bdeca9b1
commit
e6d4fac5dc
@ -4161,6 +4161,11 @@ fn (mut g Gen) selector_expr(node ast.SelectorExpr) {
|
||||
} else {
|
||||
g.write_selector_expr_embed_name(node, node.from_embed_types)
|
||||
}
|
||||
} else if sym.info is ast.Aggregate {
|
||||
agg_sym := g.table.sym(sym.info.types[g.aggregate_type_idx])
|
||||
if !g.table.struct_has_field(agg_sym, field_name) {
|
||||
g.write_selector_expr_embed_name(node, node.from_embed_types)
|
||||
}
|
||||
} else {
|
||||
g.write_selector_expr_embed_name(node, node.from_embed_types)
|
||||
}
|
||||
|
24
vlib/v/tests/sumtypes/aggregate_with_struct_embed_test.v
Normal file
24
vlib/v/tests/sumtypes/aggregate_with_struct_embed_test.v
Normal file
@ -0,0 +1,24 @@
|
||||
type SumType = StructA | StructB
|
||||
|
||||
struct StructA {
|
||||
member string
|
||||
}
|
||||
|
||||
struct StructB {
|
||||
StructA
|
||||
}
|
||||
|
||||
fn get_member(st SumType) string {
|
||||
match st {
|
||||
StructA, StructB {
|
||||
return st.member
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fn test_aggregate_with_struct_embed() {
|
||||
struct_a := StructA{'hello'}
|
||||
ret := get_member(struct_a)
|
||||
println(ret)
|
||||
assert ret == 'hello'
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user