mirror of
https://github.com/nim-lang/Nim.git
synced 2026-02-14 23:33:28 +00:00
Merge pull request #3654 from jangko/vm_uinttouint64conv
fixed #2514 unable to echo uint8-32 at compile time
This commit is contained in:
@@ -359,7 +359,14 @@ proc opConv*(dest: var TFullReg, src: TFullReg, desttyp, srctyp: PType): bool =
|
||||
of tyFloat..tyFloat64:
|
||||
dest.intVal = int(src.floatVal)
|
||||
else:
|
||||
dest.intVal = src.intVal and ((1 shl (desttyp.size*8))-1)
|
||||
let srcDist = (sizeof(src.intVal) - srctyp.size) * 8
|
||||
let destDist = (sizeof(dest.intVal) - desttyp.size) * 8
|
||||
when system.cpuEndian == bigEndian:
|
||||
dest.intVal = (src.intVal shr srcDist) shl srcDist
|
||||
dest.intVal = (dest.intVal shr destDist) shl destDist
|
||||
else:
|
||||
dest.intVal = (src.intVal shl srcDist) shr srcDist
|
||||
dest.intVal = (dest.intVal shl destDist) shr destDist
|
||||
of tyFloat..tyFloat64:
|
||||
if dest.kind != rkFloat:
|
||||
myreset(dest); dest.kind = rkFloat
|
||||
|
||||
77
tests/vm/ttouintconv.nim
Normal file
77
tests/vm/ttouintconv.nim
Normal file
@@ -0,0 +1,77 @@
|
||||
import macros
|
||||
|
||||
discard """
|
||||
msg: '''
|
||||
8 9 17
|
||||
239 255
|
||||
61439 65534 65535
|
||||
4026531839 4294967294
|
||||
17293822569102704639
|
||||
18446744073709551614
|
||||
18446744073709551615
|
||||
127
|
||||
32767
|
||||
2147483647
|
||||
9223372036854775807
|
||||
0
|
||||
128
|
||||
4294967287'''
|
||||
"""
|
||||
|
||||
#bug #2514
|
||||
|
||||
macro foo(): stmt =
|
||||
var x = 8'u8
|
||||
var y = 9'u16
|
||||
var z = 17'u32
|
||||
|
||||
echo x," ", y," ", z
|
||||
|
||||
var a = 0xEF'u8
|
||||
var aa = 0xFF'u8
|
||||
echo a, " ", aa
|
||||
|
||||
var b = 0xEFFF'u16
|
||||
var bb = 0xFFFE'u16
|
||||
var bbb = 0xFFFF'u16
|
||||
echo b, " ", bb, " ", bbb
|
||||
|
||||
var c = 0xEFFFFFFF'u32
|
||||
var cc = 0xFFFFFFFE'u32
|
||||
echo c, " ", cc
|
||||
|
||||
var d = 0xEFFFFFFFFFFFFFFF'u64
|
||||
echo d
|
||||
|
||||
var f = 0xFFFFFFFFFFFFFFFE'u64
|
||||
echo f
|
||||
|
||||
var g = 0xFFFFFFFFFFFFFFFF'u64
|
||||
echo g
|
||||
|
||||
var xx = 0x7F'u8 and 0xFF
|
||||
echo xx
|
||||
|
||||
var yy = 0x7FFF'u16
|
||||
echo yy
|
||||
|
||||
var zz = 0x7FFFFFFF'u32
|
||||
echo zz
|
||||
|
||||
macro foo2(): stmt =
|
||||
var xx = 0x7FFFFFFFFFFFFFFF
|
||||
echo xx
|
||||
|
||||
var yy = 0
|
||||
echo yy
|
||||
|
||||
var zz = 0x80'u8
|
||||
echo zz
|
||||
|
||||
var ww = -9
|
||||
var vv = ww.uint
|
||||
var kk = vv.uint32
|
||||
echo kk
|
||||
|
||||
foo()
|
||||
foo2()
|
||||
Reference in New Issue
Block a user