blob: 125896d44286e0e9951a2cf70d0cef5a82b5e170 (
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
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
|
discard """
cmd: "nim check --hints:off $file"
nimout: '''tnestedprocs.nim(27, 8) Error: 'inner' can have side effects
> tnestedprocs.nim(29, 13) Hint: 'inner' calls `.sideEffect` 'outer2'
>> tnestedprocs.nim(26, 6) Hint: 'outer2' called by 'inner'
tnestedprocs.nim(45, 8) Error: 'inner' can have side effects
> tnestedprocs.nim(47, 13) Hint: 'inner' calls `.sideEffect` 'outer6'
>> tnestedprocs.nim(44, 6) Hint: 'outer6' called by 'inner'
tnestedprocs.nim(58, 41) Error: type mismatch: got <proc ()> but expected 'proc (){.closure, noSideEffect.}'
Pragma mismatch: got '{..}', but expected '{.noSideEffect.}'.
'''
errormsg: "type mismatch: got <proc ()> but expected 'proc (){.closure, noSideEffect.}'"
"""
{.experimental: "strictEffects".}
proc outer {.noSideEffect.} =
proc inner(p: int) =
if p == 0:
outer()
inner(4)
outer()
proc outer2 =
proc inner(p: int) {.noSideEffect.} =
if p == 0:
outer2()
inner(4)
outer2()
proc outer3(p: int) {.noSideEffect.} =
proc inner(p: int) {.noSideEffect.} =
if p == 0:
p.outer3()
inner(4)
outer3(5)
proc outer6 =
proc inner(p: int) {.noSideEffect.} =
if p == 0:
outer6()
inner(4)
echo "bad"
outer6()
proc outer4 =
proc inner(p: int) {.noSideEffect.} =
if p == 0:
let x: proc () {.noSideEffect.} = outer4
x()
inner(4)
outer4()
|