mirror of
https://github.com/nim-lang/Nim.git
synced 2026-01-04 20:17:42 +00:00
* Rework exception handling in the VM Make the safepoint handling more precise and less forgiving. The new code is clearer and more commented. Perform cleanup on `return`. The no-exception-thrown case in a try block should be slightly faster since we don't parse the whole set of exceptions every time. More tests. * Fix silly error that broke a few tests * Testament doesn't like files having the same name * Remove test case that failed compilation to js
72 lines
1.3 KiB
Nim
72 lines
1.3 KiB
Nim
discard """
|
|
output: '''[127, 127, 0, 255]
|
|
[127, 127, 0, 255]
|
|
'''
|
|
|
|
nimout: '''caught Exception'''
|
|
"""
|
|
|
|
#bug #1009
|
|
type
|
|
TAggRgba8* = array[4, byte]
|
|
|
|
template R*(self: TAggRgba8): byte = self[0]
|
|
template G*(self: TAggRgba8): byte = self[1]
|
|
template B*(self: TAggRgba8): byte = self[2]
|
|
template A*(self: TAggRgba8): byte = self[3]
|
|
|
|
template `R=`*(self: TAggRgba8, val: byte) =
|
|
self[0] = val
|
|
template `G=`*(self: TAggRgba8, val: byte) =
|
|
self[1] = val
|
|
template `B=`*(self: TAggRgba8, val: byte) =
|
|
self[2] = val
|
|
template `A=`*(self: TAggRgba8, val: byte) =
|
|
self[3] = val
|
|
|
|
proc ABGR*(val: int| int64): TAggRgba8 =
|
|
var V = val
|
|
result.R = byte(V and 0xFF)
|
|
V = V shr 8
|
|
result.G = byte(V and 0xFF)
|
|
V = V shr 8
|
|
result.B = byte(V and 0xFF)
|
|
result.A = byte((V shr 8) and 0xFF)
|
|
|
|
const
|
|
c1 = ABGR(0xFF007F7F)
|
|
echo ABGR(0xFF007F7F).repr, c1.repr
|
|
|
|
|
|
# bug 8740
|
|
|
|
static:
|
|
try:
|
|
raise newException(ValueError, "foo")
|
|
except Exception:
|
|
echo "caught Exception"
|
|
except Defect:
|
|
echo "caught Defect"
|
|
except ValueError:
|
|
echo "caught ValueError"
|
|
|
|
# bug #10538
|
|
|
|
block:
|
|
proc fun1(): seq[int] =
|
|
try:
|
|
try:
|
|
result.add(1)
|
|
return
|
|
except:
|
|
result.add(-1)
|
|
finally:
|
|
result.add(2)
|
|
finally:
|
|
result.add(3)
|
|
result.add(4)
|
|
|
|
let x1 = fun1()
|
|
const x2 = fun1()
|
|
doAssert(x1 == x2)
|