From fc0a0f41d264f601071f8a203d9fa298e6a89996 Mon Sep 17 00:00:00 2001 From: Svyatoslav Kuzmich Date: Fri, 3 May 2019 19:58:27 +0300 Subject: [PATCH] [JS IR BE] Fix: patch parents problems * Patch parents for state machine builder * Patch parents for declarations inside default value of actual parameter --- .../kotlin/backend/common/lower/ExpectDeclarationsRemoving.kt | 3 +++ .../backend/js/lower/coroutines/JsSuspendFunctionsLowering.kt | 3 +++ 2 files changed, 6 insertions(+) diff --git a/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/lower/ExpectDeclarationsRemoving.kt b/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/lower/ExpectDeclarationsRemoving.kt index 4e19ba1bcda..d7cd5d6109e 100644 --- a/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/lower/ExpectDeclarationsRemoving.kt +++ b/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/lower/ExpectDeclarationsRemoving.kt @@ -15,6 +15,7 @@ import org.jetbrains.kotlin.ir.expressions.IrGetValue import org.jetbrains.kotlin.ir.expressions.impl.IrGetValueImpl import org.jetbrains.kotlin.ir.symbols.IrValueParameterSymbol import org.jetbrains.kotlin.ir.symbols.IrValueSymbol +import org.jetbrains.kotlin.ir.util.patchDeclarationParents import org.jetbrains.kotlin.ir.util.referenceFunction import org.jetbrains.kotlin.ir.visitors.IrElementTransformerVoid import org.jetbrains.kotlin.ir.visitors.IrElementVisitorVoid @@ -74,6 +75,8 @@ class ExpectDeclarationsRemoving(val context: BackendContext) : FileLoweringPass actualParameter.defaultValue = defaultValue.also { it.expression = it.expression.remapExpectValueSymbols() + // Default value might have some declarations inside. Patching parents. + it.expression.patchDeclarationParents(actualParameter.parent) } } }) diff --git a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/coroutines/JsSuspendFunctionsLowering.kt b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/coroutines/JsSuspendFunctionsLowering.kt index 2a8b3b4bc20..6a4878ae4ab 100644 --- a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/coroutines/JsSuspendFunctionsLowering.kt +++ b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/coroutines/JsSuspendFunctionsLowering.kt @@ -20,6 +20,7 @@ import org.jetbrains.kotlin.ir.expressions.impl.* import org.jetbrains.kotlin.ir.symbols.IrFieldSymbol import org.jetbrains.kotlin.ir.symbols.IrValueSymbol import org.jetbrains.kotlin.ir.util.explicitParameters +import org.jetbrains.kotlin.ir.util.patchDeclarationParents import org.jetbrains.kotlin.ir.visitors.acceptChildrenVoid import org.jetbrains.kotlin.ir.visitors.acceptVoid import org.jetbrains.kotlin.name.Name @@ -140,6 +141,8 @@ class JsSuspendFunctionsLowering(ctx: JsIrBackendContext) : AbstractSuspendFunct IrBlockBodyImpl(stateMachineFunction.startOffset, stateMachineFunction.endOffset, listOf(suspendResult, rootLoop)) stateMachineFunction.body = functionBody + // TODO: Investigate parent problems + stateMachineFunction.patchDeclarationParents(stateMachineFunction.parent) val liveLocals = computeLivenessAtSuspensionPoints(functionBody).values.flatten().toSet()