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
64
65
66
67
68
69
70
|
discard """
nimout: '''1,2
2,3
2,2
1,2
1,2
2,2
1,2
'''
output: '''1,2
2,3
1,2
2,2
1,2
1,2
2,2
1,2
'''
"""
template test =
proc say(a, b: int) =
echo a,",",b
var a = 1
say a, (a += 1; a) #1,2
var b = 1
say (b += 1; b), (b += 1; b) #2,3
type C = object {.byRef.}
i: int
proc say(a, b: C) =
echo a.i,",",b.i
proc `+=`(x: var C, y: C) = x.i += y.i
var c = C(i: 1)
when nimvm: #XXX: This would output 2,2 in the VM, which is wrong
discard
else:
say c, (c += C(i: 1); c) #1,2
proc sayVar(a: var int, b: int) =
echo a,",",b
var d = 1
sayVar d, (d += 1; d) #2,2
var e = 1
say (addr e)[], (e += 1; e) #1,2
var f = 1
say f, if false: f
else: f += 1; f #1,2
var g = 1
say g + 1, if false: g
else: g += 1; g #2,2
proc `+=+`(x: var int, y: int): int = (inc(x, y); x)
var h = 1
say h, h +=+ 1 # 1,2
test
static:
test
|