mirror of
https://github.com/nim-lang/Nim.git
synced 2025-12-28 17:04:41 +00:00
implements https://github.com/nim-lang/RFCs/issues/557 It inserts defect handing into a bare except branch ```nim try: raiseAssert "test" except: echo "nope" ``` => ```nim try: raiseAssert "test" except: # New behaviov, now well-defined: **never** catches the assert, regardless of panic mode raiseDefect() echo "nope" ``` In this way, `except` still catches foreign exceptions, but panics on `Defect`. Probably when Nim has `except {.foreign.}`, we can extend `raiseDefect` to foreign exceptions as well. That's supposed to be a small use case anyway. `--legacy:noPanicOnExcept` is provided for a transition period.
50 lines
930 B
Nim
50 lines
930 B
Nim
discard """
|
|
output: '''idx out of bounds: -1
|
|
month out of bounds: 0
|
|
Jan
|
|
Feb
|
|
Mar
|
|
Apr
|
|
May
|
|
Jun
|
|
Jul
|
|
Aug
|
|
Sep
|
|
Oct
|
|
Nov
|
|
Dec
|
|
month out of bounds: 13
|
|
idx out of bounds: 14
|
|
'''
|
|
"""
|
|
|
|
{.push boundChecks:on.}
|
|
|
|
# see issue #6532:
|
|
# js backend 0.17.3: array bounds check for non zero based arrays is buggy
|
|
|
|
proc test_arrayboundscheck() =
|
|
var months: array[1..12, string] =
|
|
["Jan", "Feb", "Mar", "Apr", "May", "Jun",
|
|
"Jul", "Aug", "Sep", "Oct", "Nov", "Dec"]
|
|
|
|
var indices = [0,1,2,3,4,5,6,7,8,9,10,11,12,13]
|
|
|
|
for i in -1 .. 14:
|
|
try:
|
|
let idx = indices[i]
|
|
try:
|
|
echo months[idx]
|
|
except IndexDefect:
|
|
echo "month out of bounds: ", idx
|
|
except IndexDefect:
|
|
echo "idx out of bounds: ", i
|
|
|
|
# #13966
|
|
var negativeIndexed: array[-2..2, int] = [0, 1, 2, 3, 4]
|
|
negativeIndexed[-1] = 2
|
|
negativeIndexed[1] = 2
|
|
doAssert negativeIndexed == [0, 2, 2, 2, 4]
|
|
|
|
test_arrayboundscheck()
|
|
{.pop.} |