fixes #19795; fixes #11852; fixes #19974; remove parsing pipeline, Nim now parses the whole module at one time (#21379)
* fixes #19795; remove parse pipeline * isScript * fixes nimscriptapi * don't touch reorder * check script * fixes tests * it seems implicit imports of system cause troubles * access the first child of `nkStmtList` * ignore comments * minor messages * perhaps increases hloLoopDetector * the module is a stmtList, which changes the errors * fixes nimdoc * fixes tlinter * fixes nim secret tests * fixes arc_misc * fixes nim secret tests again * safe; fixes one more test * GlobalError is the root cause too * fixes parsing errors * put emit types to the cfsForwardTypes section * fixes #11852; `{.push checks:off}` now works in procs * disable navigator * fixes nimdoc * add tests for JS * fixes nimsuggest
This commit is contained in:
parent
fdd7520257
commit
38f876dd48
31 changed files with 227 additions and 72 deletions
6
tests/overflow/tdistinct_range.nim
Normal file
6
tests/overflow/tdistinct_range.nim
Normal file
|
|
@ -0,0 +1,6 @@
|
|||
discard """
|
||||
outputsub: "Error: unhandled exception: over- or underflow [OverflowDefect]"
|
||||
exitcode: "1"
|
||||
"""
|
||||
var x: distinct range[0..5]
|
||||
dec(x)
|
||||
82
tests/overflow/toverflow.nim
Normal file
82
tests/overflow/toverflow.nim
Normal file
|
|
@ -0,0 +1,82 @@
|
|||
discard """
|
||||
output: "ok"
|
||||
matrix: "--overflowChecks:off; --overflowChecks:off --b:js"
|
||||
"""
|
||||
# Tests nim's ability to detect overflows
|
||||
|
||||
{.push overflowChecks: on.}
|
||||
|
||||
var
|
||||
a = high(int)
|
||||
b = -2
|
||||
overflowDetected = false
|
||||
|
||||
try:
|
||||
echo(b - a)
|
||||
except OverflowDefect:
|
||||
overflowDetected = true
|
||||
|
||||
{.pop.} # overflow check
|
||||
|
||||
doAssert(overflowDetected)
|
||||
|
||||
block: # Overflow checks in a proc
|
||||
var
|
||||
a = high(int)
|
||||
b = -2
|
||||
overflowDetected = false
|
||||
|
||||
{.push overflowChecks: on.}
|
||||
proc foo() =
|
||||
let c = b - a
|
||||
{.pop.}
|
||||
|
||||
try:
|
||||
foo()
|
||||
except OverflowDefect:
|
||||
overflowDetected = true
|
||||
|
||||
doAssert(overflowDetected)
|
||||
|
||||
block: # Overflow checks in a forward declared proc
|
||||
var
|
||||
a = high(int)
|
||||
b = -2
|
||||
overflowDetected = false
|
||||
|
||||
proc foo()
|
||||
|
||||
{.push overflowChecks: on.}
|
||||
proc foo() =
|
||||
let c = b - a
|
||||
{.pop.}
|
||||
|
||||
try:
|
||||
foo()
|
||||
except OverflowDefect:
|
||||
overflowDetected = true
|
||||
|
||||
doAssert(overflowDetected)
|
||||
|
||||
block: # Overflow checks doesn't affect fwd declaration
|
||||
var
|
||||
a = high(int)
|
||||
b = -2
|
||||
overflowDetected = false
|
||||
|
||||
{.push overflowChecks: on.}
|
||||
proc foo()
|
||||
{.pop.}
|
||||
|
||||
proc foo() =
|
||||
let c = b - a
|
||||
|
||||
try:
|
||||
foo()
|
||||
except OverflowDefect:
|
||||
overflowDetected = true
|
||||
|
||||
doAssert(not overflowDetected)
|
||||
|
||||
|
||||
echo "ok"
|
||||
7
tests/overflow/toverflow2.nim
Normal file
7
tests/overflow/toverflow2.nim
Normal file
|
|
@ -0,0 +1,7 @@
|
|||
discard """
|
||||
outputsub: "Error: unhandled exception: over- or underflow [OverflowDefect]"
|
||||
exitcode: "1"
|
||||
"""
|
||||
var a : int32 = 2147483647
|
||||
var b : int32 = 2147483647
|
||||
var c = a + b
|
||||
84
tests/overflow/toverflow_reorder.nim
Normal file
84
tests/overflow/toverflow_reorder.nim
Normal file
|
|
@ -0,0 +1,84 @@
|
|||
{.experimental: "codeReordering".}
|
||||
|
||||
discard """
|
||||
output: "ok"
|
||||
cmd: "nim $target --overflowChecks:off $options $file"
|
||||
"""
|
||||
# Tests nim's ability to detect overflows
|
||||
|
||||
{.push overflowChecks: on.}
|
||||
|
||||
var
|
||||
a = high(int)
|
||||
b = -2
|
||||
overflowDetected = false
|
||||
|
||||
try:
|
||||
echo b - a
|
||||
except OverflowDefect:
|
||||
overflowDetected = true
|
||||
|
||||
{.pop.} # overflow check
|
||||
|
||||
doAssert(overflowDetected)
|
||||
|
||||
block: # Overflow checks in a proc
|
||||
var
|
||||
a = high(int)
|
||||
b = -2
|
||||
overflowDetected = false
|
||||
|
||||
{.push overflowChecks: on.}
|
||||
proc foo() =
|
||||
let c = b - a
|
||||
{.pop.}
|
||||
|
||||
try:
|
||||
foo()
|
||||
except OverflowDefect:
|
||||
overflowDetected = true
|
||||
|
||||
doAssert(overflowDetected)
|
||||
|
||||
block: # Overflow checks in a forward declared proc
|
||||
var
|
||||
a = high(int)
|
||||
b = -2
|
||||
overflowDetected = false
|
||||
|
||||
proc foo()
|
||||
|
||||
{.push overflowChecks: on.}
|
||||
proc foo() =
|
||||
let c = b - a
|
||||
{.pop.}
|
||||
|
||||
try:
|
||||
foo()
|
||||
except OverflowDefect:
|
||||
overflowDetected = true
|
||||
|
||||
doAssert(overflowDetected)
|
||||
|
||||
block: # Overflow checks doesn't affect fwd declaration
|
||||
var
|
||||
a = high(int)
|
||||
b = -2
|
||||
overflowDetected = false
|
||||
|
||||
{.push overflowChecks: on.}
|
||||
proc foo()
|
||||
{.pop.}
|
||||
|
||||
proc foo() =
|
||||
let c = b - a
|
||||
|
||||
try:
|
||||
foo()
|
||||
except OverflowDefect:
|
||||
overflowDetected = true
|
||||
|
||||
doAssert(not overflowDetected)
|
||||
|
||||
|
||||
echo "ok"
|
||||
20
tests/overflow/tovfint.nim
Normal file
20
tests/overflow/tovfint.nim
Normal file
|
|
@ -0,0 +1,20 @@
|
|||
discard """
|
||||
output: "works!"
|
||||
"""
|
||||
# this tests the new overflow literals
|
||||
|
||||
var
|
||||
i: int
|
||||
i = int(0xffffffff'i32)
|
||||
when defined(cpu64):
|
||||
if i == -1:
|
||||
write(stdout, "works!\n")
|
||||
else:
|
||||
write(stdout, "broken!\n")
|
||||
else:
|
||||
if i == -1:
|
||||
write(stdout, "works!\n")
|
||||
else:
|
||||
write(stdout, "broken!\n")
|
||||
|
||||
#OUT works!
|
||||
Loading…
Add table
Add a link
Reference in a new issue