* Fix #12785 and add test

* better variable name
This commit is contained in:
RSDuck
2019-12-21 07:51:19 +01:00
committed by Andreas Rumpf
parent 10bd7d8fa0
commit 9b8afd1dbb
2 changed files with 51 additions and 0 deletions

View File

@@ -492,6 +492,10 @@ iterator fieldValuePairs(n: PNode): tuple[memberSym, valueSym: PNode] =
proc genComputedGoto(p: BProc; n: PNode) =
# first pass: Generate array of computed labels:
# flatten the loop body because otherwise let and var sections
# wrapped inside stmt lists by inject destructors won't be recognised
let n = n.flattenStmts()
var casePos = -1
var arraySize: int
for i in 0..<n.len:

47
tests/casestmt/t12785.nim Normal file
View File

@@ -0,0 +1,47 @@
discard """
cmd: '''nim c --newruntime $file'''
output: '''copied
copied
2
copied
copied
2
destroyed
destroyed'''
"""
type
ObjWithDestructor = object
a: int
proc `=destroy`(self: var ObjWithDestructor) =
echo "destroyed"
proc `=`(self: var ObjWithDestructor, other: ObjWithDestructor) =
echo "copied"
proc test(a: range[0..1], arg: ObjWithDestructor) =
var iteration = 0
while true:
{.computedGoto.}
let
b = int(a) * 2
c = a
d = arg
e = arg
discard c
discard d
discard e
inc iteration
case a
of 0:
assert false
of 1:
echo b
if iteration == 2:
break
test(1, ObjWithDestructor())