/* 1 */ struct A { mut: v int } /* 2 */ struct B { a A } /* 3 */ struct C { mut: b B } /* 4 */ struct D { mut: c C } /* 5 */ struct E { mut: v []int } /* 6 */ struct F { e []E } /* 7 */ mut s := 'hello world' /*( 8)*/ s.len = 0 // Error (field len immutable) /* 8 */ mut b := B{} /*( 9)*/ b.a.v = 1 // Error (field a immutable) /*( 9)*/ b.a = A{} // Error (field a immutable) /* 9 */ b = B{A{2}} // Correct /* 10 */ mut c := C{} /* 11 */ c.b = B{} // Correct /*(12)*/ c.b.a = A{} // Error (field a immutable) /*(12)*/ c.b.a.v = 1 // Error (field a immutable) /* 12 */ c2 := C{} /*(13)*/ c2.b = B{} // Error (c2 immutable) /* 13 */ mut d := D{} /* 14 */ d.c.b = B{} // Correct /* 15 */ mut f := F{} /*(16)*/ f.e << E{} // Error (field e immutable) /*(16)*/ f.e[0].v << 1 // Error (field e immutable) /* 16 */ e := E{} /*(17)*/ e.v << 1 // Error (e immutable) ===output=== .vrepl_temp.v:8:14: cannot modify immutable field `len` (type `string`) declare the field with `mut:` struct string { mut: len int } .vrepl_temp.v:9:14: cannot modify immutable field `a` (type `B`) declare the field with `mut:` struct B { mut: a A } .vrepl_temp.v:9:12: cannot modify immutable field `a` (type `B`) declare the field with `mut:` struct B { mut: a A } .vrepl_temp.v:12:14: cannot modify immutable field `a` (type `B`) declare the field with `mut:` struct B { mut: a A } .vrepl_temp.v:12:16: cannot modify immutable field `a` (type `B`) declare the field with `mut:` struct B { mut: a A } .vrepl_temp.v:13:15: `c2` is immutable. .vrepl_temp.v:16:12: cannot modify immutable field `e` (type `F`) declare the field with `mut:` struct F { mut: e []E } .vrepl_temp.v:16:17: cannot modify immutable field `e` (type `F`) declare the field with `mut:` struct F { mut: e []E } .vrepl_temp.v:17:17: `e` is immutable (can't <<)