parent
d5b4936332
commit
0b9c1da1c0
2 changed files with 48 additions and 42 deletions
|
|
@ -35,7 +35,7 @@ proc isUndefined[T](x: T): bool {.inline.} = {.emit: "`result` = `x` === undefin
|
||||||
|
|
||||||
proc reprEnum(e: int, typ: PNimType): string {.compilerRtl.} =
|
proc reprEnum(e: int, typ: PNimType): string {.compilerRtl.} =
|
||||||
if not typ.node.sons[e].isUndefined:
|
if not typ.node.sons[e].isUndefined:
|
||||||
result = $typ.node.sons[e].name
|
result = makeNimstrLit(typ.node.sons[e].name)
|
||||||
else:
|
else:
|
||||||
result = $e & " (invalid data!)"
|
result = $e & " (invalid data!)"
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -3,7 +3,7 @@ discard """
|
||||||
"""
|
"""
|
||||||
|
|
||||||
block ints:
|
block ints:
|
||||||
let
|
let
|
||||||
na: int8 = -120'i8
|
na: int8 = -120'i8
|
||||||
nb: int16 = -32700'i16
|
nb: int16 = -32700'i16
|
||||||
nc: int32 = -2147483000'i32
|
nc: int32 = -2147483000'i32
|
||||||
|
|
@ -12,9 +12,9 @@ block ints:
|
||||||
pa: int8 = 120'i8
|
pa: int8 = 120'i8
|
||||||
pb: int16 = 32700'i16
|
pb: int16 = 32700'i16
|
||||||
pc: int32 = 2147483000'i32
|
pc: int32 = 2147483000'i32
|
||||||
pd: int64 = 9223372036854775000'i64
|
pd: int64 = 9223372036854775000'i64
|
||||||
pe: int = 1234567
|
pe: int = 1234567
|
||||||
|
|
||||||
doAssert(repr(na) == "-120")
|
doAssert(repr(na) == "-120")
|
||||||
doAssert(repr(nb) == "-32700")
|
doAssert(repr(nb) == "-32700")
|
||||||
doAssert(repr(nc) == "-2147483000")
|
doAssert(repr(nc) == "-2147483000")
|
||||||
|
|
@ -27,13 +27,13 @@ block ints:
|
||||||
doAssert(repr(pe) == "1234567")
|
doAssert(repr(pe) == "1234567")
|
||||||
|
|
||||||
block uints:
|
block uints:
|
||||||
let
|
let
|
||||||
a: uint8 = 254'u8
|
a: uint8 = 254'u8
|
||||||
b: uint16 = 65300'u16
|
b: uint16 = 65300'u16
|
||||||
c: uint32 = 4294967290'u32
|
c: uint32 = 4294967290'u32
|
||||||
# d: uint64 = 18446744073709551610'u64 -> unknown node type
|
# d: uint64 = 18446744073709551610'u64 -> unknown node type
|
||||||
e: uint = 1234567
|
e: uint = 1234567
|
||||||
|
|
||||||
doAssert(repr(a) == "254")
|
doAssert(repr(a) == "254")
|
||||||
doAssert(repr(b) == "65300")
|
doAssert(repr(b) == "65300")
|
||||||
doAssert(repr(c) == "4294967290")
|
doAssert(repr(c) == "4294967290")
|
||||||
|
|
@ -41,26 +41,26 @@ block uints:
|
||||||
doAssert(repr(e) == "1234567")
|
doAssert(repr(e) == "1234567")
|
||||||
|
|
||||||
block floats:
|
block floats:
|
||||||
let
|
let
|
||||||
a: float32 = 3.4e38'f32
|
a: float32 = 3.4e38'f32
|
||||||
b: float64 = 1.7976931348623157e308'f64
|
b: float64 = 1.7976931348623157e308'f64
|
||||||
c: float = 1234.567e89
|
c: float = 1234.567e89
|
||||||
|
|
||||||
when defined js:
|
when defined js:
|
||||||
doAssert(repr(a) == "3.4e+38") # in C: 3.399999952144364e+038
|
doAssert(repr(a) == "3.4e+38") # in C: 3.399999952144364e+038
|
||||||
doAssert(repr(b) == "1.7976931348623157e+308") # in C: 1.797693134862316e+308
|
doAssert(repr(b) == "1.7976931348623157e+308") # in C: 1.797693134862316e+308
|
||||||
doAssert(repr(c) == "1.234567e+92") # in C: 1.234567e+092
|
doAssert(repr(c) == "1.234567e+92") # in C: 1.234567e+092
|
||||||
|
|
||||||
block bools:
|
block bools:
|
||||||
let
|
let
|
||||||
a: bool = true
|
a: bool = true
|
||||||
b: bool = false
|
b: bool = false
|
||||||
|
|
||||||
doAssert(repr(a) == "true")
|
doAssert(repr(a) == "true")
|
||||||
doAssert(repr(b) == "false")
|
doAssert(repr(b) == "false")
|
||||||
|
|
||||||
block enums:
|
block enums:
|
||||||
type
|
type
|
||||||
AnEnum = enum
|
AnEnum = enum
|
||||||
aeA
|
aeA
|
||||||
aeB
|
aeB
|
||||||
|
|
@ -69,28 +69,34 @@ block enums:
|
||||||
heA = -12
|
heA = -12
|
||||||
heB = 15
|
heB = 15
|
||||||
heC = 123
|
heC = 123
|
||||||
|
|
||||||
doAssert(repr(aeA) == "aeA")
|
doAssert(repr(aeA) == "aeA")
|
||||||
doAssert(repr(aeB) == "aeB")
|
doAssert(repr(aeB) == "aeB")
|
||||||
doAssert(repr(aeC) == "aeC")
|
doAssert(repr(aeC) == "aeC")
|
||||||
doAssert(repr(heA) == "heA")
|
doAssert(repr(heA) == "heA")
|
||||||
doAssert(repr(heB) == "heB")
|
doAssert(repr(heB) == "heB")
|
||||||
doAssert(repr(heC) == "heC")
|
doAssert(repr(heC) == "heC")
|
||||||
|
|
||||||
|
block emums_and_unicode: #6741
|
||||||
|
type K = enum Kanji = "漢字"
|
||||||
|
let kanji = Kanji
|
||||||
|
doAssert(kanji == Kanji, "Enum values are not equal")
|
||||||
|
doAssert($kanji == $Kanji, "Enum string values are not equal")
|
||||||
|
|
||||||
block chars:
|
block chars:
|
||||||
let
|
let
|
||||||
a = 'a'
|
a = 'a'
|
||||||
b = 'z'
|
b = 'z'
|
||||||
one = '1'
|
one = '1'
|
||||||
nl = '\x0A'
|
nl = '\x0A'
|
||||||
|
|
||||||
doAssert(repr(a) == "'a'")
|
doAssert(repr(a) == "'a'")
|
||||||
doAssert(repr(b) == "'z'")
|
doAssert(repr(b) == "'z'")
|
||||||
doAssert(repr(one) == "'1'")
|
doAssert(repr(one) == "'1'")
|
||||||
doAssert(repr(nl) == "'\\10'")
|
doAssert(repr(nl) == "'\\10'")
|
||||||
|
|
||||||
block strings:
|
block strings:
|
||||||
let
|
let
|
||||||
a: string = "12345"
|
a: string = "12345"
|
||||||
b: string = "hello,repr"
|
b: string = "hello,repr"
|
||||||
c: string = "hi\nthere"
|
c: string = "hi\nthere"
|
||||||
|
|
@ -103,19 +109,19 @@ block sets:
|
||||||
let
|
let
|
||||||
a: set[int16] = {1'i16, 2'i16, 3'i16}
|
a: set[int16] = {1'i16, 2'i16, 3'i16}
|
||||||
b: set[char] = {'A', 'k'}
|
b: set[char] = {'A', 'k'}
|
||||||
|
|
||||||
doAssert(repr(a) == "{1, 2, 3}")
|
doAssert(repr(a) == "{1, 2, 3}")
|
||||||
doAssert(repr(b) == "{'A', 'k'}")
|
doAssert(repr(b) == "{'A', 'k'}")
|
||||||
|
|
||||||
block ranges:
|
block ranges:
|
||||||
let
|
let
|
||||||
a: range[0..12] = 6
|
a: range[0..12] = 6
|
||||||
b: range[-12..0] = -6
|
b: range[-12..0] = -6
|
||||||
doAssert(repr(a) == "6")
|
doAssert(repr(a) == "6")
|
||||||
doAssert(repr(b) == "-6")
|
doAssert(repr(b) == "-6")
|
||||||
|
|
||||||
block tuples:
|
block tuples:
|
||||||
type
|
type
|
||||||
ATuple = tuple
|
ATuple = tuple
|
||||||
a: int
|
a: int
|
||||||
b: float
|
b: float
|
||||||
|
|
@ -124,7 +130,7 @@ block tuples:
|
||||||
OtherTuple = tuple
|
OtherTuple = tuple
|
||||||
a: bool
|
a: bool
|
||||||
b: int8
|
b: int8
|
||||||
|
|
||||||
let
|
let
|
||||||
ot: OtherTuple = (a: true, b: 120'i8)
|
ot: OtherTuple = (a: true, b: 120'i8)
|
||||||
t: ATuple = (a: 42, b: 12.34, c: "tuple", d: ot)
|
t: ATuple = (a: 42, b: 12.34, c: "tuple", d: ot)
|
||||||
|
|
@ -176,7 +182,7 @@ block arrays:
|
||||||
o = AObj(x: 42, y: a)
|
o = AObj(x: 42, y: a)
|
||||||
c = [o, o, o]
|
c = [o, o, o]
|
||||||
d = ["hi", "array", "!"]
|
d = ["hi", "array", "!"]
|
||||||
|
|
||||||
doAssert(repr(a) == "[0.0, 1.0, 2.0]\n")
|
doAssert(repr(a) == "[0.0, 1.0, 2.0]\n")
|
||||||
doAssert(repr(b) == "[[0.0, 1.0, 2.0], [0.0, 1.0, 2.0], [0.0, 1.0, 2.0]]\n")
|
doAssert(repr(b) == "[[0.0, 1.0, 2.0], [0.0, 1.0, 2.0], [0.0, 1.0, 2.0]]\n")
|
||||||
doAssert(repr(c) == """
|
doAssert(repr(c) == """
|
||||||
|
|
@ -198,7 +204,7 @@ block seqs:
|
||||||
o = AObj(x: 42, y: a)
|
o = AObj(x: 42, y: a)
|
||||||
c = @[o, o, o]
|
c = @[o, o, o]
|
||||||
d = @["hi", "array", "!"]
|
d = @["hi", "array", "!"]
|
||||||
|
|
||||||
doAssert(repr(a) == "@[0.0, 1.0, 2.0]\n")
|
doAssert(repr(a) == "@[0.0, 1.0, 2.0]\n")
|
||||||
doAssert(repr(b) == "@[@[0.0, 1.0, 2.0], @[0.0, 1.0, 2.0], @[0.0, 1.0, 2.0]]\n")
|
doAssert(repr(b) == "@[@[0.0, 1.0, 2.0], @[0.0, 1.0, 2.0], @[0.0, 1.0, 2.0]]\n")
|
||||||
doAssert(repr(c) == """
|
doAssert(repr(c) == """
|
||||||
|
|
@ -210,16 +216,16 @@ y = @[0.0, 1.0, 2.0]]]
|
||||||
doAssert(repr(d) == "@[\"hi\", \"array\", \"!\"]\n")
|
doAssert(repr(d) == "@[\"hi\", \"array\", \"!\"]\n")
|
||||||
|
|
||||||
block ptrs:
|
block ptrs:
|
||||||
type
|
type
|
||||||
AObj = object
|
AObj = object
|
||||||
x: ptr array[2, AObj]
|
x: ptr array[2, AObj]
|
||||||
y: int
|
y: int
|
||||||
var
|
var
|
||||||
a = [12.0, 13.0, 14.0]
|
a = [12.0, 13.0, 14.0]
|
||||||
b = addr a[0]
|
b = addr a[0]
|
||||||
c = addr a[2]
|
c = addr a[2]
|
||||||
d = AObj()
|
d = AObj()
|
||||||
|
|
||||||
doAssert(repr(a) == "[12.0, 13.0, 14.0]\n")
|
doAssert(repr(a) == "[12.0, 13.0, 14.0]\n")
|
||||||
doAssert(repr(b) == "ref 0 --> 12.0\n")
|
doAssert(repr(b) == "ref 0 --> 12.0\n")
|
||||||
doAssert(repr(c) == "ref 2 --> 14.0\n")
|
doAssert(repr(c) == "ref 2 --> 14.0\n")
|
||||||
|
|
@ -229,13 +235,13 @@ y = 0]
|
||||||
""")
|
""")
|
||||||
|
|
||||||
block ptrs:
|
block ptrs:
|
||||||
type
|
type
|
||||||
AObj = object
|
AObj = object
|
||||||
x: ref array[2, AObj]
|
x: ref array[2, AObj]
|
||||||
y: int
|
y: int
|
||||||
var
|
var
|
||||||
a = AObj()
|
a = AObj()
|
||||||
|
|
||||||
new(a.x)
|
new(a.x)
|
||||||
|
|
||||||
doAssert(repr(a) == """
|
doAssert(repr(a) == """
|
||||||
|
|
@ -248,10 +254,10 @@ y = 0]
|
||||||
block procs:
|
block procs:
|
||||||
proc test(): int =
|
proc test(): int =
|
||||||
echo "hello"
|
echo "hello"
|
||||||
var
|
var
|
||||||
ptest = test
|
ptest = test
|
||||||
nilproc: proc(): int
|
nilproc: proc(): int
|
||||||
|
|
||||||
doAssert(repr(test) == "0\n")
|
doAssert(repr(test) == "0\n")
|
||||||
doAssert(repr(ptest) == "0\n")
|
doAssert(repr(ptest) == "0\n")
|
||||||
doAssert(repr(nilproc) == "nil\n")
|
doAssert(repr(nilproc) == "nil\n")
|
||||||
|
|
@ -262,7 +268,7 @@ block bunch:
|
||||||
eA, eB, eC
|
eA, eB, eC
|
||||||
B = object
|
B = object
|
||||||
a: string
|
a: string
|
||||||
b: seq[char]
|
b: seq[char]
|
||||||
A = object
|
A = object
|
||||||
a: uint32
|
a: uint32
|
||||||
b: int
|
b: int
|
||||||
|
|
@ -281,17 +287,17 @@ block bunch:
|
||||||
o: tuple[x: B, y: string]
|
o: tuple[x: B, y: string]
|
||||||
p: proc(b: B): ref B
|
p: proc(b: B): ref B
|
||||||
q: cstring
|
q: cstring
|
||||||
|
|
||||||
proc refB(b:B):ref B =
|
proc refB(b:B):ref B =
|
||||||
new result
|
new result
|
||||||
result[] = b
|
result[] = b
|
||||||
|
|
||||||
var
|
var
|
||||||
aa: A
|
aa: A
|
||||||
bb: B = B(a: "inner", b: @['o', 'b', 'j'])
|
bb: B = B(a: "inner", b: @['o', 'b', 'j'])
|
||||||
cc: A = A(a: 12, b: 1, c: 1.2, d: '\0', e: eC,
|
cc: A = A(a: 12, b: 1, c: 1.2, d: '\0', e: eC,
|
||||||
f: "hello", g: {'A'}, h: {2'i16},
|
f: "hello", g: {'A'}, h: {2'i16},
|
||||||
i: ["hello", "world", "array"],
|
i: ["hello", "world", "array"],
|
||||||
j: @["hello", "world", "seq"], k: -1,
|
j: @["hello", "world", "seq"], k: -1,
|
||||||
l: bb, m: refB(bb), n: addr bb,
|
l: bb, m: refB(bb), n: addr bb,
|
||||||
o: (bb, "tuple!"), p: refB, q: "cstringtest" )
|
o: (bb, "tuple!"), p: refB, q: "cstringtest" )
|
||||||
|
|
@ -344,12 +350,12 @@ q = "cstringtest"]
|
||||||
""")
|
""")
|
||||||
|
|
||||||
block another:
|
block another:
|
||||||
type
|
type
|
||||||
Size1 = enum
|
Size1 = enum
|
||||||
s1a, s1b
|
s1a, s1b
|
||||||
Size2 = enum
|
Size2 = enum
|
||||||
s2c=0, s2d=20000
|
s2c=0, s2d=20000
|
||||||
Size3 = enum
|
Size3 = enum
|
||||||
s3e=0, s3f=2000000000
|
s3e=0, s3f=2000000000
|
||||||
|
|
||||||
doAssert(repr([s1a, s1b]) == "[s1a, s1b]\n")
|
doAssert(repr([s1a, s1b]) == "[s1a, s1b]\n")
|
||||||
|
|
@ -357,7 +363,7 @@ block another:
|
||||||
doAssert(repr([s3e, s3f]) == "[s3e, s3f]\n")
|
doAssert(repr([s3e, s3f]) == "[s3e, s3f]\n")
|
||||||
|
|
||||||
block another2:
|
block another2:
|
||||||
|
|
||||||
type
|
type
|
||||||
AnEnum = enum
|
AnEnum = enum
|
||||||
en1, en2, en3, en4, en5, en6
|
en1, en2, en3, en4, en5, en6
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue