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() {
|
||||
var_str := g.expr_string(expr0)
|
||||
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 {
|
||||
g.write('*')
|
||||
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