Add enumeration support. (#128)

* Add enumeration support.

* Enum classes lowering.

* merge fix

* merge fix

* used arrayOf from irModule

* changed lowering quant from body to file

* refactoring

* review fixes

* lowering for GET_OBJECT in enums

* enabled tests

* added tests

* moved tests to separate dir

* renamed test files

* moved phase up

* review fixes

* reformat
This commit is contained in:
Nikolay Igotti
2017-01-25 12:39:36 +03:00
committed by Igor Chevdar
parent 66293cb89f
commit c6a4ec2ff4
20 changed files with 774 additions and 26 deletions
@@ -0,0 +1,24 @@
enum class Game {
ROCK,
PAPER,
SCISSORS;
companion object {
fun foo() = ROCK
val bar = PAPER
val values2 = values()
val scissors = valueOf("SCISSORS")
}
}
fun box(): String {
if (Game.foo() != Game.ROCK) return "Fail 1"
if (Game.bar != Game.PAPER) return "Fail 2: ${Game.bar}"
if (Game.values().size != 3) return "Fail 3"
if (Game.valueOf("SCISSORS") != Game.SCISSORS) return "Fail 4"
if (Game.values2.size != 3) return "Fail 5"
if (Game.scissors != Game.SCISSORS) return "Fail 6"
return "OK"
}
fun main(args: Array<String>) = println(box())
@@ -0,0 +1,9 @@
val TOP_LEVEL = 5
enum class MyEnum(value: Int) {
VALUE(TOP_LEVEL)
}
fun main(args: Array<String>) {
println(MyEnum.VALUE.toString())
}
@@ -0,0 +1,8 @@
enum class Zzz(val zzz: String, val x: Int) {
Z1("z1", 1),
Z2("z2", 2)
}
fun main(args: Array<String>) {
println(Zzz.Z1.zzz + Zzz.Z2.x)
}
@@ -0,0 +1,13 @@
enum class Zzz(val zzz: String, val x: Int) {
Z1("z1", 1),
Z2("z2", 2),
Z3("z3", 3);
override fun toString(): String{
return "('$zzz', $x)"
}
}
fun main(args: Array<String>) {
println(Zzz.Z3.toString())
}
@@ -0,0 +1,15 @@
enum class Zzz {
Z1 {
override fun f() = "z1"
},
Z2 {
override fun f() = "z2"
};
open fun f() = ""
}
fun main(args: Array<String>) {
println(Zzz.Z1.f() + Zzz.Z2.f())
}
@@ -0,0 +1,8 @@
enum class E {
E1,
E2
}
fun main(args: Array<String>) {
println(E.valueOf("E1").toString())
}
@@ -0,0 +1,8 @@
enum class E {
E1,
E2
}
fun main(args: Array<String>) {
println(E.values()[1].toString())
}