cgen: fix assigning a new value to the mut sumtype receiver (#13204)
parent
91bfab79a5
commit
ef562c92a5
|
@ -435,7 +435,12 @@ fn (mut g Gen) gen_assign_stmt(node ast.AssignStmt) {
|
||||||
if op_overloaded {
|
if op_overloaded {
|
||||||
g.op_arg(val, op_expected_right, val_type)
|
g.op_arg(val, op_expected_right, val_type)
|
||||||
} else {
|
} else {
|
||||||
g.expr_with_cast(val, val_type, var_type)
|
exp_type := if left.is_auto_deref_var() {
|
||||||
|
var_type.deref()
|
||||||
|
} else {
|
||||||
|
var_type
|
||||||
|
}
|
||||||
|
g.expr_with_cast(val, val_type, exp_type)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,17 @@
|
||||||
|
pub type Foo = Bar | Baz
|
||||||
|
|
||||||
|
fn (mut f Foo) set_baz() {
|
||||||
|
f = Baz{}
|
||||||
|
}
|
||||||
|
|
||||||
|
pub struct Bar {}
|
||||||
|
|
||||||
|
pub struct Baz {}
|
||||||
|
|
||||||
|
fn test_mut_receiver_of_sumtype() {
|
||||||
|
mut x := Foo(Bar{})
|
||||||
|
x.set_baz()
|
||||||
|
|
||||||
|
println(x)
|
||||||
|
assert '$x' == 'Foo(Baz{})'
|
||||||
|
}
|
Loading…
Reference in New Issue