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 {
|
} else {
|
||||||
g.write_selector_expr_embed_name(node, node.from_embed_types)
|
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 {
|
} else {
|
||||||
g.write_selector_expr_embed_name(node, node.from_embed_types)
|
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