FIR: Pass BodyResolveComponents to ScopeTowerLevel

This commit is contained in:
Denis Zharkov
2019-09-16 10:13:08 +03:00
parent fb4b6b8290
commit 391346ae46
2 changed files with 14 additions and 9 deletions
@@ -65,7 +65,7 @@ class CallResolver(
for (scope in localScopes) {
towerDataConsumer.consume(
TowerDataKind.TOWER_LEVEL,
ScopeTowerLevel(session, scope, implicitExtensionReceiver = implicitReceiverValue),
ScopeTowerLevel(session, components, scope, implicitExtensionReceiver = implicitReceiverValue),
group++
)
}
@@ -84,7 +84,7 @@ class CallResolver(
// }
towerDataConsumer.consume(
TowerDataKind.TOWER_LEVEL,
ScopeTowerLevel(session, implicitScope, implicitExtensionReceiver = implicitReceiverValue),
ScopeTowerLevel(session, components, implicitScope, implicitExtensionReceiver = implicitReceiverValue),
group++
)
}
@@ -98,7 +98,7 @@ class CallResolver(
// }
towerDataConsumer.consume(
TowerDataKind.TOWER_LEVEL,
ScopeTowerLevel(session, implicitCompanionScope, implicitExtensionReceiver = implicitReceiverValue),
ScopeTowerLevel(session, components, implicitCompanionScope, implicitExtensionReceiver = implicitReceiverValue),
group++
)
}
@@ -138,7 +138,7 @@ class CallResolver(
for (scope in topLevelScopes) {
towerDataConsumer.consume(
TowerDataKind.TOWER_LEVEL,
ScopeTowerLevel(session, scope, implicitExtensionReceiver = implicitReceiverValue),
ScopeTowerLevel(session, components, scope, implicitExtensionReceiver = implicitReceiverValue),
group++
)
}
@@ -163,7 +163,7 @@ class CallResolver(
// Member of local scope
// fun test(x: Int) = x
for (scope in localScopes) {
towerDataConsumer.consume(TowerDataKind.TOWER_LEVEL, ScopeTowerLevel(session, scope), group++)
towerDataConsumer.consume(TowerDataKind.TOWER_LEVEL, ScopeTowerLevel(session, components, scope), group++)
}
var blockDispatchReceivers = false
@@ -181,7 +181,7 @@ class CallResolver(
// val x = 0
// class Nested { val y = x }
// }
towerDataConsumer.consume(TowerDataKind.TOWER_LEVEL, ScopeTowerLevel(session, implicitScope), group++)
towerDataConsumer.consume(TowerDataKind.TOWER_LEVEL, ScopeTowerLevel(session, components, implicitScope), group++)
}
if (implicitReceiverValue is ImplicitDispatchReceiverValue) {
val implicitCompanionScope = implicitReceiverValue.implicitCompanionScope
@@ -191,7 +191,7 @@ class CallResolver(
// companion object { val x = 0 }
// class Nested { val y = x }
// }
towerDataConsumer.consume(TowerDataKind.TOWER_LEVEL, ScopeTowerLevel(session, implicitCompanionScope), group++)
towerDataConsumer.consume(TowerDataKind.TOWER_LEVEL, ScopeTowerLevel(session, components, implicitCompanionScope), group++)
}
if (!implicitReceiverValue.boundSymbol.fir.isInner) {
blockDispatchReceivers = true
@@ -203,7 +203,7 @@ class CallResolver(
// val x = 0
// fun test() { x }
for (scope in topLevelScopes) {
towerDataConsumer.consume(TowerDataKind.TOWER_LEVEL, ScopeTowerLevel(session, scope), group++)
towerDataConsumer.consume(TowerDataKind.TOWER_LEVEL, ScopeTowerLevel(session, components, scope), group++)
}
return collector
@@ -151,6 +151,7 @@ class MemberScopeTowerLevel(
// (if explicit receiver exists, it always *should* be an extension receiver)
class ScopeTowerLevel(
session: FirSession,
val bodyResolveComponents: BodyResolveComponents,
val scope: FirScope,
val implicitExtensionReceiver: ImplicitReceiverValue<*>? = null
) : SessionBasedTowerLevel(session) {
@@ -187,7 +188,11 @@ class ScopeTowerLevel(
ProcessorAction.NEXT
}
}
TowerScopeLevel.Token.Functions -> scope.processFunctionsAndConstructorsByName(name, session, ScopeSession()) { candidate ->
TowerScopeLevel.Token.Functions -> scope.processFunctionsAndConstructorsByName(
name,
session,
bodyResolveComponents.scopeSession
) { candidate ->
if (candidate.hasConsistentReceivers(extensionReceiver)) {
processor.consumeCandidate(
candidate as T, dispatchReceiverValue = candidate.dispatchReceiverValue(),