Fixed bug with nested enums lowering + test
This commit is contained in:
+6
@@ -599,6 +599,12 @@ internal class EnumClassLowering(val context: Context) : ClassLoweringPass {
|
||||
private inner class EnumClassBodyTransformer : IrElementTransformerVoid() {
|
||||
private var enumConstructorCallTransformer: EnumConstructorCallTransformer? = null
|
||||
|
||||
override fun visitClass(declaration: IrClass): IrStatement {
|
||||
if (declaration.descriptor.kind == ClassKind.ENUM_CLASS)
|
||||
return declaration
|
||||
return super.visitClass(declaration)
|
||||
}
|
||||
|
||||
override fun visitEnumEntry(declaration: IrEnumEntry): IrStatement {
|
||||
assert(enumConstructorCallTransformer == null) { "Nested enum entry initialization:\n${declaration.dump()}" }
|
||||
|
||||
|
||||
@@ -671,6 +671,11 @@ task enum_varargParam(type: RunKonanTest) {
|
||||
source = "codegen/enum/varargParam.kt"
|
||||
}
|
||||
|
||||
task enum_nested(type: RunKonanTest) {
|
||||
goldValue = "A\nC\n"
|
||||
source = "codegen/enum/nested.kt"
|
||||
}
|
||||
|
||||
task mangling(type: LinkKonanTest) {
|
||||
goldValue =
|
||||
"Int direct [1, 2, 3, 4]\n" +
|
||||
|
||||
@@ -0,0 +1,13 @@
|
||||
package codegen.enum.nested
|
||||
|
||||
import kotlin.test.*
|
||||
|
||||
enum class Foo {
|
||||
A;
|
||||
enum class Bar { C }
|
||||
}
|
||||
|
||||
@Test fun runTest() {
|
||||
println(Foo.A)
|
||||
println(Foo.Bar.C)
|
||||
}
|
||||
Reference in New Issue
Block a user