cgen: fix return of mut symtype (#13214)
parent
38d3239b50
commit
d714dcef75
|
@ -5004,6 +5004,8 @@ fn (mut g Gen) return_stmt(node ast.Return) {
|
||||||
if g.fn_decl.return_type.is_ptr() {
|
if g.fn_decl.return_type.is_ptr() {
|
||||||
var_str := g.expr_string(expr0)
|
var_str := g.expr_string(expr0)
|
||||||
g.write(var_str.trim('&'))
|
g.write(var_str.trim('&'))
|
||||||
|
} else if g.table.sym(g.fn_decl.return_type).kind in [.sum_type, .interface_] {
|
||||||
|
g.expr_with_cast(expr0, node.types[0], g.fn_decl.return_type)
|
||||||
} else {
|
} else {
|
||||||
g.write('*')
|
g.write('*')
|
||||||
g.expr(expr0)
|
g.expr(expr0)
|
||||||
|
|
|
@ -0,0 +1,23 @@
|
||||||
|
type Sum = Struct | int
|
||||||
|
|
||||||
|
struct Struct {
|
||||||
|
mut:
|
||||||
|
value int
|
||||||
|
}
|
||||||
|
|
||||||
|
fn update(mut s Struct) Sum {
|
||||||
|
s.value += 1
|
||||||
|
return s
|
||||||
|
}
|
||||||
|
|
||||||
|
fn test_fn_return_mut_sumtype() {
|
||||||
|
mut s := Sum(Struct{
|
||||||
|
value: 1
|
||||||
|
})
|
||||||
|
if mut s is Struct {
|
||||||
|
s = update(mut s)
|
||||||
|
assert s.value == 2
|
||||||
|
} else {
|
||||||
|
assert false
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue