diff --git a/compiler/injectdestructors.nim b/compiler/injectdestructors.nim index dec437427a..743bf9e232 100644 --- a/compiler/injectdestructors.nim +++ b/compiler/injectdestructors.nim @@ -499,7 +499,6 @@ proc handleNested(n, dest: PNode; c: var Con; mode: ProcessMode): PNode = result[last] = processCall(n[last]) # A statement list does not introduce a scope, the AST can # contain silly nested statement lists. - #result = handleScope(n, dest, n.typ, 0, c, mode) of nkBlockStmt, nkBlockExpr: result = handleScope(n, dest, n.typ, 1, c, mode) of nkIfStmt, nkIfExpr: @@ -513,13 +512,11 @@ proc handleNested(n, dest: PNode; c: var Con; mode: ProcessMode): PNode = result.add handleScope(n[i], dest, n[i][^1].typ, n[i].len - 1, c, mode) of nkWhen: # This should be a "when nimvm" node. result = copyTree(n) - result[1][0] = handleScope(n[1][0], dest, n[1][0][^1].typ, 0, c, mode) + result[1][0] = processCall(n[1][0]) + # handleScope(n[1][0], dest, n[1][0][^1].typ, 0, c, mode) of nkWhileStmt: - #result = copyNode(n) inc c.inLoop result = handleScope(n, dest, nil, 0, c, mode) - #result.add p(n[0], c, normal) - #result.add p(n[1], c, normal) dec c.inLoop else: assert(false) @@ -634,10 +631,101 @@ proc pVarScoped(v: PNode; c: var Con; ri, res: PNode) = elif ri.kind != nkEmpty: res.add moveOrCopy(v, ri, c) +template handleNestedTempl(n: untyped, processCall: untyped) = + case n.kind + of nkStmtList, nkStmtListExpr: + if n.len == 0: return n + result = copyNode(n) + for i in 0..