@@ -334,8 +334,8 @@ proc collectExceptState(ctx: var Ctx, n: PNode): PNode {.inline.} =
334
334
assert(c[i].kind == nkType)
335
335
let nextCond = newTreeIT(nkCall, c.info, ctx.g.getSysType(c.info, tyBool),
336
336
newSymNode(g.getSysMagic(c.info, " of" , mOf)),
337
- ctx.newCurExcAccess(),
338
- # g.callCodegenProc("getCurrentException"),
337
+ # ctx.newCurExcAccess(),
338
+ g.callCodegenProc(" getCurrentException" ),
339
339
c[i])
340
340
341
341
if cond.isNil:
@@ -356,17 +356,17 @@ proc collectExceptState(ctx: var Ctx, n: PNode): PNode {.inline.} =
356
356
ifStmt.add(ifBranch)
357
357
358
358
if ifStmt.len != 0 :
359
- let setupExc = newTree(nkCall, newSymNode(ctx.g.getCompilerProc(" pushCurrentException" )), ctx.newCurExcAccess())
359
+ # let setupExc = newTree(nkCall, newSymNode(ctx.g.getCompilerProc("pushCurrentException")), ctx.newCurExcAccess())
360
360
# result = newTree(nkStmtList, ctx.newNullifyCurExc(n.info), ifStmt)
361
- result = newTree(nkStmtList, setupExc, ifStmt)
361
+ result = newTree(nkStmtList, ifStmt)
362
362
else :
363
363
result = ctx.g.emptyNode
364
364
365
365
proc addElseToExcept(ctx: var Ctx, n, gotoOut: PNode) =
366
366
# We should adjust finallyPath to gotoOut if exception is handled
367
367
# if there is no finally node next to this except, gotoOut must be nil
368
368
if n.kind == nkStmtList:
369
- if n[1 ].kind == nkIfStmt and n[1 ][^ 1 ].kind != nkElse:
369
+ if n[0 ].kind == nkIfStmt and n[0 ][^ 1 ].kind != nkElse:
370
370
# Not all cases are covered
371
371
let branchBody = newNodeI(nkStmtList, n.info)
372
372
@@ -385,11 +385,11 @@ proc addElseToExcept(ctx: var Ctx, n, gotoOut: PNode) =
385
385
branchBody.add(newTree(nkGotoState, ctx.curExcLandingState))
386
386
387
387
let elseBranch = newTree(nkElse, branchBody)
388
- n[1 ].add(elseBranch)
388
+ n[0 ].add(elseBranch)
389
389
390
390
n.add newTree(nkCall,
391
391
newSymNode(ctx.g.getCompilerProc(" popCurrentException" )))
392
-
392
+ n.add(ctx.newNullifyCurExc(n.info))
393
393
if gotoOut != nil :
394
394
n.add(ctx.newFinallyPathAssign(ctx.curFinallyLevel - 1 , gotoOut[0 ], n.info))
395
395
@@ -1444,9 +1444,17 @@ proc wrapIntoTryExcept(ctx: var Ctx, n: PNode): PNode {.inline.} =
1444
1444
1445
1445
# let tryBody = newTree(nkStmtList, setupExc, n)
1446
1446
let tryBody = newTree(nkStmtList, n)
1447
- let exceptBranch = newTree(nkExceptBranch, ctx.newCatchBody(ctx.fn.info))
1447
+ let exceptBody = ctx.newCatchBody(ctx.fn.info)
1448
+ let exceptBranch = newTree(nkExceptBranch, exceptBody)
1449
+
1450
+ result = newTree(nkStmtList)
1451
+ let getCurExc = ctx.g.callCodegenProc(" getCurrentException" )
1452
+ let tempExc = ctx.newTempVar(getCurExc.typ, result )
1453
+ result .add newTree(nkTryStmt, tryBody, exceptBranch)
1454
+ exceptBody.add ctx.newTempVarAsgn(tempExc, getCurExc)
1448
1455
1449
- result = newTree(nkTryStmt, tryBody, exceptBranch)
1456
+ result .add newTree(nkCall, newSymNode(ctx.g.getCompilerProc(" pushCurrentException" )), ctx.newTempVarAccess(tempExc))
1457
+ # result = newTree(nkTryStmt, tryBody, exceptBranch)
1450
1458
1451
1459
proc wrapIntoStateLoop(ctx: var Ctx, n: PNode): PNode =
1452
1460
# while true:
0 commit comments