FIR: Extract processLevelForRegularInvoke
This commit is contained in:
+12
-8
@@ -478,20 +478,18 @@ class FirTowerResolverSession internal constructor(
|
|||||||
invokeReceiverValue: ExpressionReceiverValue,
|
invokeReceiverValue: ExpressionReceiverValue,
|
||||||
invokeOnGivenReceiverCandidateFactory: CandidateFactory
|
invokeOnGivenReceiverCandidateFactory: CandidateFactory
|
||||||
) {
|
) {
|
||||||
processLevel(
|
processLevelForRegularInvoke(
|
||||||
invokeReceiverValue.toMemberScopeTowerLevel(),
|
invokeReceiverValue.toMemberScopeTowerLevel(),
|
||||||
info, TowerGroup.Member,
|
info, TowerGroup.Member,
|
||||||
ExplicitReceiverKind.DISPATCH_RECEIVER,
|
ExplicitReceiverKind.DISPATCH_RECEIVER,
|
||||||
InvokeResolveMode.IMPLICIT_CALL_ON_GIVEN_RECEIVER,
|
|
||||||
invokeOnGivenReceiverCandidateFactory
|
invokeOnGivenReceiverCandidateFactory
|
||||||
)
|
)
|
||||||
|
|
||||||
for ((index, localScope) in localScopes.withIndex()) {
|
for ((index, localScope) in localScopes.withIndex()) {
|
||||||
processLevel(
|
processLevelForRegularInvoke(
|
||||||
localScope.toScopeTowerLevel(extensionReceiver = invokeReceiverValue),
|
localScope.toScopeTowerLevel(extensionReceiver = invokeReceiverValue),
|
||||||
info, TowerGroup.Local(index),
|
info, TowerGroup.Local(index),
|
||||||
ExplicitReceiverKind.EXTENSION_RECEIVER,
|
ExplicitReceiverKind.EXTENSION_RECEIVER,
|
||||||
InvokeResolveMode.IMPLICIT_CALL_ON_GIVEN_RECEIVER,
|
|
||||||
invokeOnGivenReceiverCandidateFactory
|
invokeOnGivenReceiverCandidateFactory
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
@@ -499,26 +497,32 @@ class FirTowerResolverSession internal constructor(
|
|||||||
for ((implicitReceiverValue, depth) in implicitReceiversUsableAsValues) {
|
for ((implicitReceiverValue, depth) in implicitReceiversUsableAsValues) {
|
||||||
// NB: companions are processed via implicitReceiverValues!
|
// NB: companions are processed via implicitReceiverValues!
|
||||||
val parentGroup = TowerGroup.Implicit(depth)
|
val parentGroup = TowerGroup.Implicit(depth)
|
||||||
processLevel(
|
processLevelForRegularInvoke(
|
||||||
implicitReceiverValue.toMemberScopeTowerLevel(extensionReceiver = invokeReceiverValue),
|
implicitReceiverValue.toMemberScopeTowerLevel(extensionReceiver = invokeReceiverValue),
|
||||||
info, parentGroup.Member,
|
info, parentGroup.Member,
|
||||||
ExplicitReceiverKind.EXTENSION_RECEIVER,
|
ExplicitReceiverKind.EXTENSION_RECEIVER,
|
||||||
InvokeResolveMode.IMPLICIT_CALL_ON_GIVEN_RECEIVER,
|
|
||||||
invokeOnGivenReceiverCandidateFactory
|
invokeOnGivenReceiverCandidateFactory
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
for ((index, topLevelScope) in topLevelScopes.withIndex()) {
|
for ((index, topLevelScope) in topLevelScopes.withIndex()) {
|
||||||
processLevel(
|
processLevelForRegularInvoke(
|
||||||
topLevelScope.toScopeTowerLevel(extensionReceiver = invokeReceiverValue),
|
topLevelScope.toScopeTowerLevel(extensionReceiver = invokeReceiverValue),
|
||||||
info, TowerGroup.Top(index),
|
info, TowerGroup.Top(index),
|
||||||
ExplicitReceiverKind.EXTENSION_RECEIVER,
|
ExplicitReceiverKind.EXTENSION_RECEIVER,
|
||||||
InvokeResolveMode.IMPLICIT_CALL_ON_GIVEN_RECEIVER,
|
|
||||||
invokeOnGivenReceiverCandidateFactory
|
invokeOnGivenReceiverCandidateFactory
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private suspend fun processLevelForRegularInvoke(
|
||||||
|
towerLevel: SessionBasedTowerLevel,
|
||||||
|
callInfo: CallInfo,
|
||||||
|
group: TowerGroup,
|
||||||
|
explicitReceiverKind: ExplicitReceiverKind,
|
||||||
|
candidateFactory: CandidateFactory
|
||||||
|
) = processLevel(towerLevel, callInfo, group, explicitReceiverKind, InvokeResolveMode.IMPLICIT_CALL_ON_GIVEN_RECEIVER, candidateFactory)
|
||||||
|
|
||||||
// Here we already know extension receiver for invoke, and it's stated in info as first argument
|
// Here we already know extension receiver for invoke, and it's stated in info as first argument
|
||||||
private suspend fun runResolverForBuiltinInvokeExtensionWithExplicitArgument(
|
private suspend fun runResolverForBuiltinInvokeExtensionWithExplicitArgument(
|
||||||
info: CallInfo,
|
info: CallInfo,
|
||||||
|
|||||||
Reference in New Issue
Block a user