FIR: Support context receivers in Fir2Ir

This commit is contained in:
Denis.Zharkov
2022-03-24 15:18:17 +03:00
committed by teamcity
parent aa74bd4293
commit 41bc842b9d
18 changed files with 309 additions and 81 deletions
@@ -90,9 +90,10 @@ fun SessionHolder.collectTowerDataElementsForClass(owner: FirClass, defaultType:
}
val thisReceiver = ImplicitDispatchReceiverValue(owner.symbol, defaultType, session, scopeSession)
val contextReceivers = (owner as? FirRegularClass)?.contextReceivers?.map {
val contextReceivers = (owner as? FirRegularClass)?.contextReceivers?.mapIndexed { index, receiver ->
ContextReceiverValueForClass(
owner.symbol, it.typeRef.coneType, it.labelName, session, scopeSession,
owner.symbol, receiver.typeRef.coneType, receiver.labelName, session, scopeSession,
contextReceiverNumber = index,
)
}.orEmpty()
@@ -248,6 +249,9 @@ typealias FirLocalScopes = PersistentList<FirLocalScope>
fun FirCallableDeclaration.createContextReceiverValues(
sessionHolder: SessionHolder,
): List<ContextReceiverValueForCallable> =
contextReceivers.map {
ContextReceiverValueForCallable(symbol, it.typeRef.coneType, it.labelName, sessionHolder.session, sessionHolder.scopeSession)
contextReceivers.mapIndexed { index, receiver ->
ContextReceiverValueForCallable(
symbol, receiver.typeRef.coneType, receiver.labelName, sessionHolder.session, sessionHolder.scopeSession,
contextReceiverNumber = index,
)
}