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) { for (scope in localScopes) {
towerDataConsumer.consume( towerDataConsumer.consume(
TowerDataKind.TOWER_LEVEL, TowerDataKind.TOWER_LEVEL,
ScopeTowerLevel(session, scope, implicitExtensionReceiver = implicitReceiverValue), ScopeTowerLevel(session, components, scope, implicitExtensionReceiver = implicitReceiverValue),
group++ group++
) )
} }
@@ -84,7 +84,7 @@ class CallResolver(
// } // }
towerDataConsumer.consume( towerDataConsumer.consume(
TowerDataKind.TOWER_LEVEL, TowerDataKind.TOWER_LEVEL,
ScopeTowerLevel(session, implicitScope, implicitExtensionReceiver = implicitReceiverValue), ScopeTowerLevel(session, components, implicitScope, implicitExtensionReceiver = implicitReceiverValue),
group++ group++
) )
} }
@@ -98,7 +98,7 @@ class CallResolver(
// } // }
towerDataConsumer.consume( towerDataConsumer.consume(
TowerDataKind.TOWER_LEVEL, TowerDataKind.TOWER_LEVEL,
ScopeTowerLevel(session, implicitCompanionScope, implicitExtensionReceiver = implicitReceiverValue), ScopeTowerLevel(session, components, implicitCompanionScope, implicitExtensionReceiver = implicitReceiverValue),
group++ group++
) )
} }
@@ -138,7 +138,7 @@ class CallResolver(
for (scope in topLevelScopes) { for (scope in topLevelScopes) {
towerDataConsumer.consume( towerDataConsumer.consume(
TowerDataKind.TOWER_LEVEL, TowerDataKind.TOWER_LEVEL,
ScopeTowerLevel(session, scope, implicitExtensionReceiver = implicitReceiverValue), ScopeTowerLevel(session, components, scope, implicitExtensionReceiver = implicitReceiverValue),
group++ group++
) )
} }
@@ -163,7 +163,7 @@ class CallResolver(
// Member of local scope // Member of local scope
// fun test(x: Int) = x // fun test(x: Int) = x
for (scope in localScopes) { 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 var blockDispatchReceivers = false
@@ -181,7 +181,7 @@ class CallResolver(
// val x = 0 // val x = 0
// class Nested { val y = x } // 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) { if (implicitReceiverValue is ImplicitDispatchReceiverValue) {
val implicitCompanionScope = implicitReceiverValue.implicitCompanionScope val implicitCompanionScope = implicitReceiverValue.implicitCompanionScope
@@ -191,7 +191,7 @@ class CallResolver(
// companion object { val x = 0 } // companion object { val x = 0 }
// class Nested { val y = x } // 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) { if (!implicitReceiverValue.boundSymbol.fir.isInner) {
blockDispatchReceivers = true blockDispatchReceivers = true
@@ -203,7 +203,7 @@ class CallResolver(
// val x = 0 // val x = 0
// fun test() { x } // fun test() { x }
for (scope in topLevelScopes) { 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 return collector
@@ -151,6 +151,7 @@ class MemberScopeTowerLevel(
// (if explicit receiver exists, it always *should* be an extension receiver) // (if explicit receiver exists, it always *should* be an extension receiver)
class ScopeTowerLevel( class ScopeTowerLevel(
session: FirSession, session: FirSession,
val bodyResolveComponents: BodyResolveComponents,
val scope: FirScope, val scope: FirScope,
val implicitExtensionReceiver: ImplicitReceiverValue<*>? = null val implicitExtensionReceiver: ImplicitReceiverValue<*>? = null
) : SessionBasedTowerLevel(session) { ) : SessionBasedTowerLevel(session) {
@@ -187,7 +188,11 @@ class ScopeTowerLevel(
ProcessorAction.NEXT 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)) { if (candidate.hasConsistentReceivers(extensionReceiver)) {
processor.consumeCandidate( processor.consumeCandidate(
candidate as T, dispatchReceiverValue = candidate.dispatchReceiverValue(), candidate as T, dispatchReceiverValue = candidate.dispatchReceiverValue(),