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 {
|
||||
g.op_arg(val, op_expected_right, val_type)
|
||||
} 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