FIR: Support typeRef-name label for this

This commit is contained in:
Denis.Zharkov
2022-03-24 14:58:11 +03:00
committed by teamcity
parent ac399321f0
commit 512446843b
13 changed files with 38 additions and 108 deletions
@@ -168,11 +168,11 @@ class FirTowerDataContext private constructor(
)
}
fun addReceiver(name: Name?, implicitReceiverValue: ImplicitReceiverValue<*>): FirTowerDataContext {
fun addReceiver(name: Name?, implicitReceiverValue: ImplicitReceiverValue<*>, additionalLabName: Name? = null): FirTowerDataContext {
val element = implicitReceiverValue.asTowerDataElement()
return FirTowerDataContext(
towerDataElements.add(element),
implicitReceiverStack.add(name, implicitReceiverValue),
implicitReceiverStack.add(name, implicitReceiverValue, additionalLabName),
localScopes,
nonLocalTowerDataElements.add(element)
)
@@ -42,7 +42,7 @@ class PersistentImplicitReceiverStack private constructor(
val stack = stack.add(value)
val originalTypes = originalTypes.add(value.originalType)
val index = stack.size - 1
val receiversPerLabel = name?.let { receiversPerLabel.put(it, value) } ?: receiversPerLabel
val receiversPerLabel = receiversPerLabel.putIfNameIsNotNull(name, value).putIfNameIsNotNull(aliasLabel, value)
val indexesPerSymbol = indexesPerSymbol.put(value.boundSymbol, index)
return PersistentImplicitReceiverStack(
@@ -53,6 +53,12 @@ class PersistentImplicitReceiverStack private constructor(
)
}
private fun PersistentSetMultimap<Name, ImplicitReceiverValue<*>>.putIfNameIsNotNull(name: Name?, value: ImplicitReceiverValue<*>) =
if (name != null)
put(name, value)
else
this
fun addContextReceiver(value: ContextReceiverValue<*>): PersistentImplicitReceiverStack {
val labelName = value.labelName ?: return this