Rewrote enum lowering to support usage from other modules.
- Split up enum lowering into two stages: descriptors creation and IR creation. - Added link stage test. - Enum.valueOf() uses binary search instead of linear.
This commit is contained in:
@@ -349,12 +349,12 @@ task enum1(type: RunKonanTest) {
|
||||
}
|
||||
|
||||
task enum_valueOf(type: RunKonanTest) {
|
||||
goldValue = "E1\n"
|
||||
goldValue = "E1\nE2\nE3\n"
|
||||
source = "codegen/enum/valueOf.kt"
|
||||
}
|
||||
|
||||
task enum_values(type: RunKonanTest) {
|
||||
goldValue = "E2\n"
|
||||
goldValue = "E3\nE1\nE2\n"
|
||||
source = "codegen/enum/values.kt"
|
||||
}
|
||||
|
||||
@@ -383,6 +383,12 @@ task enum_interfaceCallWithEntryClass(type: RunKonanTest) {
|
||||
source = "codegen/enum/interfaceCallWithEntryClass.kt"
|
||||
}
|
||||
|
||||
task enum_linkTest(type: LinkKonanTest) {
|
||||
goldValue = "42\n117\n-1\n"
|
||||
source = "codegen/enum/linkTest_main.kt"
|
||||
lib = "codegen/enum/linkTest_lib.kt"
|
||||
}
|
||||
|
||||
task innerClass_simple(type: RunKonanTest) {
|
||||
goldValue = "OK\n"
|
||||
source = "codegen/innerClass/simple.kt"
|
||||
|
||||
@@ -0,0 +1,7 @@
|
||||
package a
|
||||
|
||||
enum class A(val x: Int) {
|
||||
Z1(42),
|
||||
Z2(117),
|
||||
Z3(-1)
|
||||
}
|
||||
@@ -0,0 +1,7 @@
|
||||
import a.*
|
||||
|
||||
fun main(args: Array<String>) {
|
||||
println(A.Z1.x)
|
||||
println(A.valueOf("Z2").x)
|
||||
println(A.values()[2].x)
|
||||
}
|
||||
@@ -1,8 +1,11 @@
|
||||
enum class E {
|
||||
E3,
|
||||
E1,
|
||||
E2
|
||||
}
|
||||
|
||||
fun main(args: Array<String>) {
|
||||
println(E.valueOf("E1").toString())
|
||||
println(E.valueOf("E2").toString())
|
||||
println(E.valueOf("E3").toString())
|
||||
}
|
||||
@@ -1,8 +1,11 @@
|
||||
enum class E {
|
||||
E3,
|
||||
E1,
|
||||
E2
|
||||
}
|
||||
|
||||
fun main(args: Array<String>) {
|
||||
println(E.values()[0].toString())
|
||||
println(E.values()[1].toString())
|
||||
println(E.values()[2].toString())
|
||||
}
|
||||
Reference in New Issue
Block a user