summary refs log tree commit diff stats
path: root/tests/effects/tfuncs_cannot_mutate.nim
blob: 8784cbbb1a33ba9dfa8d3228ab93cc5435a3c681 (plain) (blame)
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
discard """
  errormsg: "'mutate' can have side effects"
  nimout: '''an object reachable from 'n' is potentially mutated
tfuncs_cannot_mutate.nim(39, 15) the mutation is here
tfuncs_cannot_mutate.nim(37, 7) is the statement that connected the mutation to the parameter
'''
"""

{.experimental: "strictFuncs".}

type
  Node = ref object
    le, ri: Node
    data: string

func insert(x: var seq[Node]; yyy: Node) =
  let L = x.len
  x.setLen L + 1
  x[L] = yyy

func len(n: Node): int =
  var it = n
  while it != nil:
    inc result
    it = it.ri

func doNotDistract(n: Node) =
  var m = Node()
  m.data = "abc"

func select(a, b: Node): Node = b

func mutate(n: Node) =
  var it = n
  let x = it
  let y = x
  let z = y

  select(x, z).data = "tricky"