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

(cherry picked from commit a81434a890)
This commit is contained in:
Bung
2020-11-12 01:41:49 +08:00
committed by narimiran
parent d10f841b60
commit 272bc81f51
2 changed files with 31 additions and 2 deletions

View File

@@ -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

View 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)