mirror of
https://github.com/nim-lang/Nim.git
synced 2026-01-03 03:32:32 +00:00
@@ -292,7 +292,7 @@ proc forallElements(c: var TLiftCtx; t: PType; body, x, y: PNode) =
|
||||
let whileLoop = genWhileLoop(c, i, x)
|
||||
let elemType = t.lastSon
|
||||
fillBody(c, elemType, whileLoop.sons[1], x.at(i, elemType),
|
||||
y.at(i, elemType))
|
||||
y.at(i, elemType))
|
||||
addIncStmt(c, whileLoop.sons[1], i)
|
||||
body.add whileLoop
|
||||
|
||||
|
||||
@@ -355,6 +355,8 @@ proc semUnown(c: PContext; n: PNode): PNode =
|
||||
|
||||
result = copyTree(n[1])
|
||||
result.typ = unownedType(c, result.typ)
|
||||
# little hack for injectdestructors.nim (see bug #11350):
|
||||
#result.sons[0].typ = nil
|
||||
|
||||
proc magicsAfterOverloadResolution(c: PContext, n: PNode,
|
||||
flags: TExprFlags): PNode =
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -3,7 +3,10 @@ discard """
|
||||
[127, 127, 0, 255]
|
||||
'''
|
||||
|
||||
nimout: '''caught Exception'''
|
||||
nimout: '''caught Exception
|
||||
main:begin
|
||||
main:end
|
||||
'''
|
||||
"""
|
||||
|
||||
#bug #1009
|
||||
@@ -24,7 +27,7 @@ template `B=`*(self: TAggRgba8, val: byte) =
|
||||
template `A=`*(self: TAggRgba8, val: byte) =
|
||||
self[3] = val
|
||||
|
||||
proc ABGR*(val: int| int64): TAggRgba8 =
|
||||
proc ABGR*(val: int | int64): TAggRgba8 =
|
||||
var V = val
|
||||
result.R = byte(V and 0xFF)
|
||||
V = V shr 8
|
||||
@@ -69,3 +72,12 @@ block:
|
||||
let x1 = fun1()
|
||||
const x2 = fun1()
|
||||
doAssert(x1 == x2)
|
||||
|
||||
# bug #11610
|
||||
proc simpleTryFinally()=
|
||||
try:
|
||||
echo "main:begin"
|
||||
finally:
|
||||
echo "main:end"
|
||||
|
||||
static: simpleTryFinally()
|
||||
|
||||
Reference in New Issue
Block a user