Fixed bug with nested enums lowering + test

This commit is contained in:
Igor Chevdar
2018-02-12 14:53:06 +03:00
parent 0dc0831405
commit ae95da2416
3 changed files with 24 additions and 0 deletions
@@ -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()}" }
+5
View File
@@ -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)
}