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.expr(node.left)
|
||||||
g.write(', ')
|
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.expr(node.right)
|
||||||
|
}
|
||||||
g.write(')')
|
g.write(')')
|
||||||
if gen_or {
|
if gen_or {
|
||||||
g.or_block(tmp_opt, node.or_block, ast.void_type)
|
g.or_block(tmp_opt, node.or_block, ast.void_type)
|
||||||
|
|
|
@ -27,3 +27,21 @@ fn test_printing_of_channels() {
|
||||||
fch.close()
|
fch.close()
|
||||||
assert fch.str() == 'chan f64{cap: 100, closed: 1}'
|
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