Merge pull request #3654 from jangko/vm_uinttouint64conv
fixed #2514 unable to echo uint8-32 at compile time
This commit is contained in:
commit
17a78f4f8d
2 changed files with 85 additions and 1 deletions
|
|
@ -359,7 +359,14 @@ proc opConv*(dest: var TFullReg, src: TFullReg, desttyp, srctyp: PType): bool =
|
||||||
of tyFloat..tyFloat64:
|
of tyFloat..tyFloat64:
|
||||||
dest.intVal = int(src.floatVal)
|
dest.intVal = int(src.floatVal)
|
||||||
else:
|
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:
|
of tyFloat..tyFloat64:
|
||||||
if dest.kind != rkFloat:
|
if dest.kind != rkFloat:
|
||||||
myreset(dest); 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()
|
||||||
Loading…
Add table
Add a link
Reference in a new issue