parent
035a163454
commit
f2e74bce7a
|
@ -1199,6 +1199,9 @@ fn (mut c Checker) fail_if_immutable(expr ast.Expr) (string, token.Position) {
|
|||
c.error('`$typ_sym.kind` can not be modified', expr.pos)
|
||||
}
|
||||
}
|
||||
.aggregate {
|
||||
c.fail_if_immutable(expr.expr)
|
||||
}
|
||||
else {
|
||||
c.error('unexpected symbol `$typ_sym.kind`', expr.pos)
|
||||
}
|
||||
|
|
|
@ -0,0 +1,46 @@
|
|||
struct Foo {
|
||||
mut:
|
||||
num int
|
||||
}
|
||||
|
||||
struct Bar {
|
||||
mut:
|
||||
text string
|
||||
}
|
||||
|
||||
struct Baz {
|
||||
mut:
|
||||
text string
|
||||
}
|
||||
|
||||
type FBB = Bar | Baz | Foo
|
||||
|
||||
fn test_sumtype_assign() {
|
||||
mut arr := []FBB{}
|
||||
arr << Foo{
|
||||
num: 22
|
||||
}
|
||||
arr << Bar{
|
||||
text: 'bar'
|
||||
}
|
||||
arr << Baz{
|
||||
text: 'baz'
|
||||
}
|
||||
mut results := []string{}
|
||||
for a in arr {
|
||||
match mut a {
|
||||
Bar, Baz {
|
||||
a.text = 'I am ' + a.text
|
||||
println(a.text)
|
||||
results << a.text
|
||||
}
|
||||
Foo {
|
||||
a.num = 11
|
||||
results << 'Num is $a.num'
|
||||
}
|
||||
}
|
||||
}
|
||||
assert results[0] == 'Num is 11'
|
||||
assert results[1] == 'I am bar'
|
||||
assert results[2] == 'I am baz'
|
||||
}
|
Loading…
Reference in New Issue