cgen: fix channel of sumtype (#12938)
parent
b4723c18fc
commit
d3ccdfd75c
|
@ -70,7 +70,11 @@ fn (mut g Gen) infix_expr_arrow_op(node ast.InfixExpr) {
|
|||
}
|
||||
g.expr(node.left)
|
||||
g.write(', ')
|
||||
if g.table.sym(elem_type).kind in [.sum_type, .interface_] {
|
||||
g.expr_with_cast(node.right, node.right_type, elem_type)
|
||||
} else {
|
||||
g.expr(node.right)
|
||||
}
|
||||
g.write(')')
|
||||
if gen_or {
|
||||
g.or_block(tmp_opt, node.or_block, ast.void_type)
|
||||
|
|
|
@ -27,3 +27,21 @@ fn test_printing_of_channels() {
|
|||
fch.close()
|
||||
assert fch.str() == 'chan f64{cap: 100, closed: 1}'
|
||||
}
|
||||
|
||||
struct Aa {}
|
||||
|
||||
struct Ab {}
|
||||
|
||||
type As = Aa | Ab
|
||||
|
||||
fn func(ch chan As) {
|
||||
ch <- Aa{}
|
||||
}
|
||||
|
||||
fn test_chan_of_sumtype() {
|
||||
a := chan As{}
|
||||
go func(a)
|
||||
ret := <-a
|
||||
println(ret)
|
||||
assert '$ret' == 'As(Aa{})'
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue