diff options
author | Andreas Rumpf <rumpf_a@web.de> | 2019-07-05 07:26:06 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2019-07-05 07:26:06 +0200 |
commit | 28c9c062a4f845b13d9dfd5ec8d23314675f7c10 (patch) | |
tree | 00324ea508177c2a4fbd37edf3c2d88b227fed83 /compiler/vmgen.nim | |
parent | b64dd795b136248a60b8476d16bfe6e964b7fe18 (diff) | |
download | Nim-28c9c062a4f845b13d9dfd5ec8d23314675f7c10.tar.gz |
fixes #11610 (#11659)
Diffstat (limited to 'compiler/vmgen.nim')
-rw-r--r-- | compiler/vmgen.nim | 9 |
1 files changed, 5 insertions, 4 deletions
diff --git a/compiler/vmgen.nim b/compiler/vmgen.nim index 9e1c4d602..e221929a2 100644 --- a/compiler/vmgen.nim +++ b/compiler/vmgen.nim @@ -501,7 +501,7 @@ proc genTry(c: PCtx; n: PNode; dest: var TDest) = c.gen(n.sons[0], dest) c.clearDest(n, dest) # Add a jump past the exception handling code - endings.add(c.xjmp(n, opcJmp, 0)) + let jumpToFinally = c.xjmp(n, opcJmp, 0) # This signals where the body ends and where the exception handling begins c.patch(ehPos) for i in 1 ..< n.len: @@ -525,6 +525,7 @@ proc genTry(c: PCtx; n: PNode; dest: var TDest) = let fin = lastSon(n) # we always generate an 'opcFinally' as that pops the safepoint # from the stack if no exception is raised in the body. + c.patch(jumpToFinally) c.gABx(fin, opcFinally, 0, 0) for endPos in endings: c.patch(endPos) if fin.kind == nkFinally: @@ -2230,9 +2231,9 @@ proc genProc(c: PCtx; s: PSym): int = c.gABC(body, opcEof, eofInstr.regA) c.optimizeJumps(result) s.offset = c.prc.maxSlots - # if s.name.s == "fun1": - # echo renderTree(body) - # c.echoCode(result) + #if s.name.s == "main": + # echo renderTree(body) + # c.echoCode(result) c.prc = oldPrc else: c.prc.maxSlots = s.offset |