[JS IR BE] Fix: patch parents problems

* Patch parents for state machine builder
* Patch parents for declarations inside default value of actual parameter
This commit is contained in:
Svyatoslav Kuzmich
2019-05-03 19:58:27 +03:00
parent 130d2d00c3
commit fc0a0f41d2
2 changed files with 6 additions and 0 deletions
@@ -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)
}
}
})
@@ -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()