Fixes #5062 (#5527); JS: holes in enums

This commit is contained in:
Silvio 2017-03-15 10:33:37 +01:00 • committed by Andreas Rumpf
commit 51cd3bd86f
9 changed files with 95 additions and 27 deletions

10
tests/js/tbasicenum.nim Normal file
View file

@ -0,0 +1,10 @@
discard """
output: "ABCDC"
"""
type
MyEnum = enum
A,B,C,D
# trick the optimizer with an seq:
var x = @[A,B,C,D]
echo x[0],x[1],x[2],x[3],MyEnum(2)

12
tests/js/tenumhole.nim Normal file
View file

@ -0,0 +1,12 @@
discard """
output: "first0second32third64"
"""
type Holed = enum
hFirst = (0,"first")
hSecond = (32,"second")
hThird = (64,"third")
var x = @[0,32,64] # This is just to avoid the compiler inlining the value of the enum
echo Holed(x[0]),ord Holed(x[0]),Holed(x[1]),ord Holed(x[1]),Holed(x[2]),ord Holed(x[2])

12
tests/js/tenumnegkey.nim Normal file
View file

@ -0,0 +1,12 @@
discard """
output: "first-12second32third64"
"""
type Holed = enum
hFirst = (-12,"first")
hSecond = (32,"second")
hThird = (64,"third")
var x = @[-12,32,64] # This is just to avoid the compiler inlining the value of the enum
echo Holed(x[0]),ord Holed(x[0]),Holed(x[1]),ord Holed(x[1]),Holed(x[2]),ord Holed(x[2])

19
tests/js/tenumoffset.nim Normal file
View file

@ -0,0 +1,19 @@
discard """
output: "my value A1my value Bconc2valueCabc4abc"
"""
const
strValB = "my value B"
type
TMyEnum = enum
valueA = (1, "my value A"),
valueB = strValB & "conc",
valueC,
valueD = (4, "abc")
proc getValue(i:int): TMyEnum = TMyEnum(i)
# trick the optimizer with a variable:
var x = getValue(4)
echo getValue(1), ord(valueA), getValue(2), ord(valueB), getValue(3), getValue(4), ord(valueD), x