I have found such example when seq is immutable
type B* = object
myseq: seq[int]
type A* = object
bseq*: seq[B]
proc test1() =
var b: B
b.myseq = newSeq[int]()
var i = 0
while i < len(b.myseq):
if b.myseq[i] == 10:
b.myseq.del(i) # mutable
proc test() =
var b: B
b.myseq = newSeq[int]()
var a: A
a.bseq = newSeq[B]()
var j = 0
while j < len(a.bseq):
var myb = a.bseq[j]
var i = 0
while i < len(myb.myseq):
myb.myseq.del(i) # mutable
i += 1
j += 1
proc test2() =
var b: B
b.myseq = newSeq[int]()
var a: A
a.bseq = newSeq[B]()
for myb in a.bseq:
var i = 0
while i < len(myb.myseq):
myb.myseq.del(i) # immutable
i += 1
It seems that in test2 it is "for myb in a.bseq" which makes later myb.myseq immutable but with comparison to test1 and test I have feeling that it is a bit inconsistent. Why "for myb in a.bseq:" makes it immutable whilst myb = a.bseq[j] not? Or maybe I am wrong at all...