Fix 14127 js from int to int casting (#15918)
* fix #14127 from int to int casting * add test for #14127 * use template for test, also test uint2int * move to tests/types/t14127_cast_number.nim targets:c cpp js
This commit is contained in:
parent
f02c7542fc
commit
a81434a890
2 changed files with 31 additions and 2 deletions
|
|
@ -2406,8 +2406,7 @@ proc genCast(p: PProc, n: PNode, r: var TCompRes) =
|
||||||
r.res = "($1 $2)" % [r.res, trimmer]
|
r.res = "($1 $2)" % [r.res, trimmer]
|
||||||
elif toInt:
|
elif toInt:
|
||||||
if fromInt:
|
if fromInt:
|
||||||
let trimmer = unsignedTrimmer(dest.size)
|
return
|
||||||
r.res = "($1 $2)" % [r.res, trimmer]
|
|
||||||
elif fromUint:
|
elif fromUint:
|
||||||
if src.size == 4 and dest.size == 4:
|
if src.size == 4 and dest.size == 4:
|
||||||
# XXX prevent multi evaluations
|
# XXX prevent multi evaluations
|
||||||
|
|
|
||||||
30
tests/types/t14127_cast_number.nim
Normal file
30
tests/types/t14127_cast_number.nim
Normal file
|
|
@ -0,0 +1,30 @@
|
||||||
|
discard """
|
||||||
|
targets: "c cpp js"
|
||||||
|
"""
|
||||||
|
block: # bug #14127
|
||||||
|
template int2uint(T) =
|
||||||
|
var a = -1
|
||||||
|
let b = cast[T](a)
|
||||||
|
doAssert b < 0
|
||||||
|
let c = b + 1
|
||||||
|
doAssert c is T
|
||||||
|
doAssert c == 0
|
||||||
|
|
||||||
|
int2uint(int8)
|
||||||
|
int2uint(int16)
|
||||||
|
int2uint(int32)
|
||||||
|
int2uint(int64)
|
||||||
|
|
||||||
|
block: # maybe related
|
||||||
|
template uint2int(T) =
|
||||||
|
var a = 3
|
||||||
|
let b = cast[T](a)
|
||||||
|
doAssert b > 0
|
||||||
|
let c = b - 1
|
||||||
|
doAssert c is T
|
||||||
|
doAssert c == 2
|
||||||
|
|
||||||
|
uint2int(uint8)
|
||||||
|
uint2int(uint16)
|
||||||
|
uint2int(uint32)
|
||||||
|
uint2int(uint64)
|
||||||
Loading…
Add table
Add a link
Reference in a new issue