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]
|
||||
elif toInt:
|
||||
if fromInt:
|
||||
let trimmer = unsignedTrimmer(dest.size)
|
||||
r.res = "($1 $2)" % [r.res, trimmer]
|
||||
return
|
||||
elif fromUint:
|
||||
if src.size == 4 and dest.size == 4:
|
||||
# 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