Skip to content

Commit 4263a51

Browse files
committed
progress2
1 parent 5cd532c commit 4263a51

File tree

2 files changed

+624
-616
lines changed

2 files changed

+624
-616
lines changed

compiler/closureiters.nim

Lines changed: 17 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -334,8 +334,8 @@ proc collectExceptState(ctx: var Ctx, n: PNode): PNode {.inline.} =
334334
assert(c[i].kind == nkType)
335335
let nextCond = newTreeIT(nkCall, c.info, ctx.g.getSysType(c.info, tyBool),
336336
newSymNode(g.getSysMagic(c.info, "of", mOf)),
337-
ctx.newCurExcAccess(),
338-
# g.callCodegenProc("getCurrentException"),
337+
# ctx.newCurExcAccess(),
338+
g.callCodegenProc("getCurrentException"),
339339
c[i])
340340

341341
if cond.isNil:
@@ -356,17 +356,17 @@ proc collectExceptState(ctx: var Ctx, n: PNode): PNode {.inline.} =
356356
ifStmt.add(ifBranch)
357357

358358
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())
360360
# result = newTree(nkStmtList, ctx.newNullifyCurExc(n.info), ifStmt)
361-
result = newTree(nkStmtList, setupExc, ifStmt)
361+
result = newTree(nkStmtList, ifStmt)
362362
else:
363363
result = ctx.g.emptyNode
364364

365365
proc addElseToExcept(ctx: var Ctx, n, gotoOut: PNode) =
366366
# We should adjust finallyPath to gotoOut if exception is handled
367367
# if there is no finally node next to this except, gotoOut must be nil
368368
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:
370370
# Not all cases are covered
371371
let branchBody = newNodeI(nkStmtList, n.info)
372372

@@ -385,11 +385,11 @@ proc addElseToExcept(ctx: var Ctx, n, gotoOut: PNode) =
385385
branchBody.add(newTree(nkGotoState, ctx.curExcLandingState))
386386

387387
let elseBranch = newTree(nkElse, branchBody)
388-
n[1].add(elseBranch)
388+
n[0].add(elseBranch)
389389

390390
n.add newTree(nkCall,
391391
newSymNode(ctx.g.getCompilerProc("popCurrentException")))
392-
392+
n.add(ctx.newNullifyCurExc(n.info))
393393
if gotoOut != nil:
394394
n.add(ctx.newFinallyPathAssign(ctx.curFinallyLevel - 1, gotoOut[0], n.info))
395395

@@ -1444,9 +1444,17 @@ proc wrapIntoTryExcept(ctx: var Ctx, n: PNode): PNode {.inline.} =
14441444

14451445
# let tryBody = newTree(nkStmtList, setupExc, n)
14461446
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)
14481455

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)
14501458

14511459
proc wrapIntoStateLoop(ctx: var Ctx, n: PNode): PNode =
14521460
# while true:

0 commit comments

Comments
 (0)