1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
|
discard """
cmd: "nim check --hints:off $file"
"""
import tables
{.experimental: "views".}
const
Whitespace = {' ', '\t', '\n', '\r'}
proc split*(s: string, seps: set[char] = Whitespace,
maxsplit: int = -1): Table[int, openArray[char]] =
var last = 0
var splits = maxsplit
result = initTable[int, openArray[char]]()
while last <= len(s):
var first = last
while last < len(s) and s[last] notin seps:
inc(last)
if splits == 0: last = len(s)
result[first] = toOpenArray(s, first, last-1)
result[first][0] = 'c' #[tt.Error
attempt to mutate a borrowed location from an immutable view
]#
if splits == 0: break
dec(splits)
inc(last)
proc `$`(x: openArray[char]): string =
result = newString(x.len)
for i in 0..<x.len: result[i] = x[i]
proc otherTest(x: int) =
var y: var int = x #[tt.Error
'y' borrows from the immutable location 'x' and attempts to mutate it
]#
y = 3
proc main() =
let words = split("asdf 231")
for i, x in words:
echo i, ": ", x
main()
# This has to continue to work:
type
PNode = ref object
TSrcGen = object
comStack: seq[PNode]
proc pushCom(g: var TSrcGen, n: PNode) =
setLen(g.comStack, g.comStack.len + 1)
g.comStack[^1] = n
|