From d75434ac71fb566a8cf53e51432bbb100c79c2fe Mon Sep 17 00:00:00 2001 From: romanart Date: Tue, 16 Oct 2018 22:19:03 +0300 Subject: [PATCH] [JS IR BE] Support tailreq in JS --- .../jetbrains/kotlin/backend/common/lower/TailrecLowering.kt | 4 ++-- .../src/org/jetbrains/kotlin/ir/backend/js/compiler.kt | 1 + 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/lower/TailrecLowering.kt b/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/lower/TailrecLowering.kt index 5030b937fd6..17f4fc619d8 100644 --- a/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/lower/TailrecLowering.kt +++ b/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/lower/TailrecLowering.kt @@ -53,7 +53,7 @@ private fun lowerTailRecursionCalls(context: BackendContext, irFunction: IrFunct irFunction.body = builder.irBlockBody { // Define variables containing current values of parameters: val parameterToVariable = parameters.associate { - it to irTemporaryVar(irGet(it), nameHint = it.symbol.suggestVariableName()) + it to irTemporaryVar(irGet(it), nameHint = it.symbol.suggestVariableName(), parent = irFunction) } // (these variables are to be updated on any tail call). @@ -65,7 +65,7 @@ private fun lowerTailRecursionCalls(context: BackendContext, irFunction: IrFunct // Read variables containing current values of parameters: val parameterToNew = parameters.associate { val variable = parameterToVariable[it]!! - it to irTemporary(irGet(variable), nameHint = it.symbol.suggestVariableName()) + it to irTemporary(irGet(variable), nameHint = it.symbol.suggestVariableName()).also { it.parent = irFunction } } val transformer = BodyTransformer( diff --git a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/compiler.kt b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/compiler.kt index 1df2730c592..c0180fe1b3d 100644 --- a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/compiler.kt +++ b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/compiler.kt @@ -105,6 +105,7 @@ private fun JsIrBackendContext.performInlining(moduleFragment: IrModuleFragment) private fun JsIrBackendContext.lower(moduleFragment: IrModuleFragment, dependencies: List) { moduleFragment.files.forEach(ThrowableSuccessorsLowering(this)::lower) + moduleFragment.files.forEach(TailrecLowering(this)::runOnFilePostfix) moduleFragment.files.forEach(UnitMaterializationLowering(this)::lower) moduleFragment.files.forEach(EnumClassLowering(this)::runOnFilePostfix) moduleFragment.files.forEach(EnumUsageLowering(this)::lower)