Handle different enum sizes in reprAux (#5207)
This commit is contained in:
parent
88f95a2f7e
commit
c98a8f3701
2 changed files with 34 additions and 1 deletions
|
|
@ -233,6 +233,14 @@ when not defined(useNimRtl):
|
||||||
add result, " --> "
|
add result, " --> "
|
||||||
reprAux(result, p, typ.base, cl)
|
reprAux(result, p, typ.base, cl)
|
||||||
|
|
||||||
|
proc getInt(p: pointer, size: int): int =
|
||||||
|
case size
|
||||||
|
of 1: return int(cast[ptr uint8](p)[])
|
||||||
|
of 2: return int(cast[ptr uint16](p)[])
|
||||||
|
of 4: return int(cast[ptr uint32](p)[])
|
||||||
|
of 8: return int(cast[ptr uint64](p)[])
|
||||||
|
else: discard
|
||||||
|
|
||||||
proc reprAux(result: var string, p: pointer, typ: PNimType,
|
proc reprAux(result: var string, p: pointer, typ: PNimType,
|
||||||
cl: var ReprClosure) =
|
cl: var ReprClosure) =
|
||||||
if cl.recdepth == 0:
|
if cl.recdepth == 0:
|
||||||
|
|
@ -266,7 +274,7 @@ when not defined(useNimRtl):
|
||||||
of tyFloat: add result, $(cast[ptr float](p)[])
|
of tyFloat: add result, $(cast[ptr float](p)[])
|
||||||
of tyFloat32: add result, $(cast[ptr float32](p)[])
|
of tyFloat32: add result, $(cast[ptr float32](p)[])
|
||||||
of tyFloat64: add result, $(cast[ptr float64](p)[])
|
of tyFloat64: add result, $(cast[ptr float64](p)[])
|
||||||
of tyEnum: add result, reprEnum(cast[ptr int](p)[], typ)
|
of tyEnum: add result, reprEnum(getInt(p, typ.size), typ)
|
||||||
of tyBool: add result, reprBool(cast[ptr bool](p)[])
|
of tyBool: add result, reprBool(cast[ptr bool](p)[])
|
||||||
of tyChar: add result, reprChar(cast[ptr char](p)[])
|
of tyChar: add result, reprChar(cast[ptr char](p)[])
|
||||||
of tyString: reprStrAux(result, cast[ptr string](p)[])
|
of tyString: reprStrAux(result, cast[ptr string](p)[])
|
||||||
|
|
|
||||||
25
tests/system/tenum_array_repr.nim
Normal file
25
tests/system/tenum_array_repr.nim
Normal file
|
|
@ -0,0 +1,25 @@
|
||||||
|
discard """
|
||||||
|
output: '''
|
||||||
|
1
|
||||||
|
[a, b]
|
||||||
|
|
||||||
|
2
|
||||||
|
[c, d]
|
||||||
|
|
||||||
|
4
|
||||||
|
[e, f]'''
|
||||||
|
"""
|
||||||
|
|
||||||
|
# issue 5045
|
||||||
|
|
||||||
|
type size1 = enum a, b
|
||||||
|
echo sizeof(size1)
|
||||||
|
echo repr([a, b])
|
||||||
|
|
||||||
|
type size2 = enum c=0, d=20000
|
||||||
|
echo sizeof(size2)
|
||||||
|
echo repr([c, d])
|
||||||
|
|
||||||
|
type size4 = enum e=0, f=2000000000
|
||||||
|
echo sizeof(size4)
|
||||||
|
echo repr([e, f])
|
||||||
Loading…
Add table
Add a link
Reference in a new issue