FIR2IR: Fix substitution work for context receivers

This commit is contained in:
Denis.Zharkov
2022-05-05 11:14:26 +03:00
committed by teamcity
parent 9ec2411218
commit b87412c5af
12 changed files with 192 additions and 23 deletions
@@ -44,3 +44,16 @@ inline fun buildContextReceiver(init: FirContextReceiverBuilder.() -> Unit): Fir
}
return FirContextReceiverBuilder().apply(init).build()
}
@OptIn(ExperimentalContracts::class)
inline fun buildContextReceiverCopy(original: FirContextReceiver, init: FirContextReceiverBuilder.() -> Unit): FirContextReceiver {
contract {
callsInPlace(init, kotlin.contracts.InvocationKind.EXACTLY_ONCE)
}
val copyBuilder = FirContextReceiverBuilder()
copyBuilder.source = original.source
copyBuilder.typeRef = original.typeRef
copyBuilder.customLabelName = original.customLabelName
copyBuilder.labelNameFromTypeRef = original.labelNameFromTypeRef
return copyBuilder.apply(init).build()
}
@@ -280,6 +280,10 @@ object BuilderConfigurator : AbstractBuilderConfigurator<FirTreeBuilder>(FirTree
parents += loopJumpBuilder
}
builder(contextReceiver) {
withCopy()
}
builder(valueParameter, type = "FirValueParameterImpl") {
openBuilder()
withCopy()