fixes #6753
This commit is contained in:
parent
6abdd7cbf6
commit
fe18769fe1
2 changed files with 20 additions and 7 deletions
|
|
@ -531,13 +531,13 @@ proc mulInt(a, b: int): int {.asmNoStackFrame, compilerproc.} =
|
||||||
proc divInt(a, b: int): int {.asmNoStackFrame, compilerproc.} =
|
proc divInt(a, b: int): int {.asmNoStackFrame, compilerproc.} =
|
||||||
when defined(nimphp):
|
when defined(nimphp):
|
||||||
asm """
|
asm """
|
||||||
return floor(`a` / `b`);
|
return trunc(`a` / `b`);
|
||||||
"""
|
"""
|
||||||
else:
|
else:
|
||||||
asm """
|
asm """
|
||||||
if (`b` == 0) `raiseDivByZero`();
|
if (`b` == 0) `raiseDivByZero`();
|
||||||
if (`b` == -1 && `a` == 2147483647) `raiseOverflow`();
|
if (`b` == -1 && `a` == 2147483647) `raiseOverflow`();
|
||||||
return Math.floor(`a` / `b`);
|
return Math.trunc(`a` / `b`);
|
||||||
"""
|
"""
|
||||||
|
|
||||||
proc modInt(a, b: int): int {.asmNoStackFrame, compilerproc.} =
|
proc modInt(a, b: int): int {.asmNoStackFrame, compilerproc.} =
|
||||||
|
|
@ -549,7 +549,7 @@ proc modInt(a, b: int): int {.asmNoStackFrame, compilerproc.} =
|
||||||
asm """
|
asm """
|
||||||
if (`b` == 0) `raiseDivByZero`();
|
if (`b` == 0) `raiseDivByZero`();
|
||||||
if (`b` == -1 && `a` == 2147483647) `raiseOverflow`();
|
if (`b` == -1 && `a` == 2147483647) `raiseOverflow`();
|
||||||
return Math.floor(`a` % `b`);
|
return Math.trunc(`a` % `b`);
|
||||||
"""
|
"""
|
||||||
|
|
||||||
proc addInt64(a, b: int): int {.asmNoStackFrame, compilerproc.} =
|
proc addInt64(a, b: int): int {.asmNoStackFrame, compilerproc.} =
|
||||||
|
|
@ -594,13 +594,13 @@ proc mulInt64(a, b: int): int {.asmNoStackFrame, compilerproc.} =
|
||||||
proc divInt64(a, b: int): int {.asmNoStackFrame, compilerproc.} =
|
proc divInt64(a, b: int): int {.asmNoStackFrame, compilerproc.} =
|
||||||
when defined(nimphp):
|
when defined(nimphp):
|
||||||
asm """
|
asm """
|
||||||
return floor(`a` / `b`);
|
return trunc(`a` / `b`);
|
||||||
"""
|
"""
|
||||||
else:
|
else:
|
||||||
asm """
|
asm """
|
||||||
if (`b` == 0) `raiseDivByZero`();
|
if (`b` == 0) `raiseDivByZero`();
|
||||||
if (`b` == -1 && `a` == 9223372036854775807) `raiseOverflow`();
|
if (`b` == -1 && `a` == 9223372036854775807) `raiseOverflow`();
|
||||||
return Math.floor(`a` / `b`);
|
return Math.trunc(`a` / `b`);
|
||||||
"""
|
"""
|
||||||
|
|
||||||
proc modInt64(a, b: int): int {.asmNoStackFrame, compilerproc.} =
|
proc modInt64(a, b: int): int {.asmNoStackFrame, compilerproc.} =
|
||||||
|
|
@ -612,7 +612,7 @@ proc modInt64(a, b: int): int {.asmNoStackFrame, compilerproc.} =
|
||||||
asm """
|
asm """
|
||||||
if (`b` == 0) `raiseDivByZero`();
|
if (`b` == 0) `raiseDivByZero`();
|
||||||
if (`b` == -1 && `a` == 9223372036854775807) `raiseOverflow`();
|
if (`b` == -1 && `a` == 9223372036854775807) `raiseOverflow`();
|
||||||
return Math.floor(`a` % `b`);
|
return Math.trunc(`a` % `b`);
|
||||||
"""
|
"""
|
||||||
|
|
||||||
proc negInt(a: int): int {.compilerproc.} =
|
proc negInt(a: int): int {.compilerproc.} =
|
||||||
|
|
|
||||||
|
|
@ -2,7 +2,9 @@ discard """
|
||||||
output: '''foo
|
output: '''foo
|
||||||
js 3.14
|
js 3.14
|
||||||
7
|
7
|
||||||
1'''
|
1
|
||||||
|
-21550
|
||||||
|
-21550'''
|
||||||
"""
|
"""
|
||||||
|
|
||||||
# This file tests the JavaScript generator
|
# This file tests the JavaScript generator
|
||||||
|
|
@ -40,3 +42,14 @@ procThatRefersToConst() # Call bar before it is defined
|
||||||
proc procThatRefersToConst() =
|
proc procThatRefersToConst() =
|
||||||
var i = 0 # Use a var index, otherwise nim will constfold foo[0]
|
var i = 0 # Use a var index, otherwise nim will constfold foo[0]
|
||||||
echo someConst[i] # JS exception here: foo is still not initialized (undefined)
|
echo someConst[i] # JS exception here: foo is still not initialized (undefined)
|
||||||
|
|
||||||
|
# bug #6753
|
||||||
|
let x = -1861876800
|
||||||
|
const y = 86400
|
||||||
|
echo (x - (y - 1)) div y # Now gives `-21550`
|
||||||
|
|
||||||
|
proc foo09() =
|
||||||
|
let x = -1861876800
|
||||||
|
const y = 86400
|
||||||
|
echo (x - (y - 1)) div y # Still gives `-21551`
|
||||||
|
foo09()
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue