v2 / vlib / v / checker / tests / assign_immutable_reference_struct_field_err.vv
21 lines · 19 sloc · 452 bytes · 0c8ce3bcb9fd4a2e5bd5f991a5a07da976d780d7
Raw
1struct Tree {
2mut:
3 garbage int
4 parent ?&Tree
5}
6
7fn main() {
8 // `parent` is not declared as mutable!
9 parent := Tree{
10 garbage: 11
11 }
12 // taking a reference of `parent` and putting it under a `mut:` struct field
13 mut child := Tree{
14 parent: &parent
15 }
16
17 // unwrap the reference of `parent`, but declare it as `mut`
18 mut inner_parent := child.parent?
19 inner_parent.garbage = 777 // !we can mutate `parent` freely!
20 println(parent.garbage) // 777
21}
22