mirror of
https://github.com/nim-lang/Nim.git
synced 2026-06-04 02:44:44 +00:00
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:
@@ -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)
|
||||
Reference in New Issue
Block a user