From ae95da241616a7842c7371a392a5fe0140b1104a Mon Sep 17 00:00:00 2001 From: Igor Chevdar Date: Mon, 12 Feb 2018 14:53:06 +0300 Subject: [PATCH] Fixed bug with nested enums lowering + test --- .../kotlin/backend/konan/lower/EnumClassLowering.kt | 6 ++++++ backend.native/tests/build.gradle | 5 +++++ backend.native/tests/codegen/enum/nested.kt | 13 +++++++++++++ 3 files changed, 24 insertions(+) create mode 100644 backend.native/tests/codegen/enum/nested.kt diff --git a/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/lower/EnumClassLowering.kt b/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/lower/EnumClassLowering.kt index 76e021008e5..37c07d23627 100644 --- a/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/lower/EnumClassLowering.kt +++ b/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/lower/EnumClassLowering.kt @@ -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()}" } diff --git a/backend.native/tests/build.gradle b/backend.native/tests/build.gradle index 3e21f5034e8..02a7a20d4fb 100644 --- a/backend.native/tests/build.gradle +++ b/backend.native/tests/build.gradle @@ -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" + diff --git a/backend.native/tests/codegen/enum/nested.kt b/backend.native/tests/codegen/enum/nested.kt new file mode 100644 index 00000000000..9a0d3205632 --- /dev/null +++ b/backend.native/tests/codegen/enum/nested.kt @@ -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) +} \ No newline at end of file