From 3b7321ef94738353e57253b6f1afc5d45891a059 Mon Sep 17 00:00:00 2001 From: Nikolay Igotti Date: Wed, 14 Dec 2016 18:19:16 +0300 Subject: [PATCH] Boxing. --- .../kotlin/backend/konan/KonanLower.kt | 10 ++++----- .../kotlin/backend/konan/KonanPhases.kt | 1 + .../kotlin/backend/konan/lower/Autoboxing.kt | 22 +++++++++++++++++++ backend.native/tests/build.gradle | 7 +++++- .../basic => codegen/boxing}/boxing0.kt | 0 .../tests/codegen/boxing/boxing1.kt | 9 ++++++++ 6 files changed, 43 insertions(+), 6 deletions(-) create mode 100644 backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/lower/Autoboxing.kt rename backend.native/tests/{runtime/basic => codegen/boxing}/boxing0.kt (100%) create mode 100644 backend.native/tests/codegen/boxing/boxing1.kt diff --git a/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/KonanLower.kt b/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/KonanLower.kt index 91e4ada660d..a8bddce96c1 100644 --- a/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/KonanLower.kt +++ b/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/KonanLower.kt @@ -1,11 +1,8 @@ package org.jetbrains.kotlin.backend.konan -import org.jetbrains.kotlin.backend.konan.PhaseManager -import org.jetbrains.kotlin.backend.konan.Context -import org.jetbrains.kotlin.backend.common.lower.LocalFunctionsLowering -import org.jetbrains.kotlin.backend.common.lower.SharedVariablesLowering import org.jetbrains.kotlin.backend.common.runOnFilePostfix -import org.jetbrains.kotlin.backend.konan.lower.CallableReferenceLowering +import org.jetbrains.kotlin.backend.common.lower.* +import org.jetbrains.kotlin.backend.konan.lower.* import org.jetbrains.kotlin.ir.declarations.IrFile import org.jetbrains.kotlin.ir.declarations.IrModuleFragment @@ -29,5 +26,8 @@ internal class KonanLower(val context: Context) { phaser.phase("Lower_callables") { CallableReferenceLowering(context).runOnFilePostfix(irFile) } + phaser.phase("Autobox") { + Autoboxing(context).runOnFilePostfix(irFile) + } } } diff --git a/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/KonanPhases.kt b/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/KonanPhases.kt index 3ef24fc8fb0..43d06b7a1ae 100644 --- a/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/KonanPhases.kt +++ b/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/KonanPhases.kt @@ -13,6 +13,7 @@ object KonanPhases { "Lower_shared_variables" to KonanPhase("Shared Variable Lowering"), "Lower_local_functions" to KonanPhase("Local Function Lowering"), "Lower_callables" to KonanPhase("Callable references Lowering"), + "Autobox" to KonanPhase("Autoboxing of primitive types"), "Lower" to KonanPhase("IR Lowering"), "Bitcode" to KonanPhase("LLVM BitCode Generation"), "RTTI" to KonanPhase("RTTI Generation"), diff --git a/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/lower/Autoboxing.kt b/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/lower/Autoboxing.kt new file mode 100644 index 00000000000..4aab8da3323 --- /dev/null +++ b/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/lower/Autoboxing.kt @@ -0,0 +1,22 @@ +package org.jetbrains.kotlin.backend.konan.lower + +import org.jetbrains.kotlin.backend.common.* +import org.jetbrains.kotlin.backend.konan.KonanBackendContext +import org.jetbrains.kotlin.backend.konan.llvm.ir2string +import org.jetbrains.kotlin.ir.declarations.* +import org.jetbrains.kotlin.ir.expressions.IrBody + +internal class Autoboxing(val context: KonanBackendContext) : FunctionLoweringPass { + + var boxedCount = 0 + + /* + override fun lower(irBody: IrBody) { + println("Boxer body " + ir2string(irBody)) + } */ + + override fun lower(irFunction: IrFunction) { + println("Boxer function " + ir2string(irFunction)) + + } +} diff --git a/backend.native/tests/build.gradle b/backend.native/tests/build.gradle index d339abc31a2..d57ffc71554 100644 --- a/backend.native/tests/build.gradle +++ b/backend.native/tests/build.gradle @@ -461,7 +461,12 @@ task statements0(type: RunKonanTest) { task boxing0(type: RunKonanTest) { disabled = true goldValue = "17\n" - source = "runtime/basic/boxing0.kt" + source = "codegen/boxing/boxing0.kt" +} + +task boxing1 (type:RunKonanTest) { + disabled = true + source = "codegen/boxing/boxing1.kt" } task interface0(type: RunKonanTest) { diff --git a/backend.native/tests/runtime/basic/boxing0.kt b/backend.native/tests/codegen/boxing/boxing0.kt similarity index 100% rename from backend.native/tests/runtime/basic/boxing0.kt rename to backend.native/tests/codegen/boxing/boxing0.kt diff --git a/backend.native/tests/codegen/boxing/boxing1.kt b/backend.native/tests/codegen/boxing/boxing1.kt new file mode 100644 index 00000000000..57b11e6b185 --- /dev/null +++ b/backend.native/tests/codegen/boxing/boxing1.kt @@ -0,0 +1,9 @@ +fun foo(arg: Any) { + println(arg.toString()) +} + +fun main(args: Array) { + foo(1) + foo(false) + foo("Hello") +} \ No newline at end of file