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