[FIR] Cleanup storing context for lambdas during body resolution

This commit is contained in:
Dmitriy Novozhilov
2023-02-06 10:29:51 +02:00
committed by Space Team
parent 791a7b1c31
commit c25a5bc9c1
2 changed files with 9 additions and 7 deletions
@@ -649,11 +649,9 @@ class BodyResolveContext(
mode: ResolutionMode, mode: ResolutionMode,
f: () -> T f: () -> T
): T { ): T {
require(mode !is ResolutionMode.ContextDependent && mode !is ResolutionMode.ContextDependentDelegate)
if (mode !is ResolutionMode.LambdaResolution) { if (mode !is ResolutionMode.LambdaResolution) {
specialTowerDataContexts.storeAnonymousFunctionContext(anonymousFunction.symbol, towerDataContext) storeContextForAnonymousFunction(anonymousFunction)
}
if (mode is ResolutionMode.ContextDependent || mode is ResolutionMode.ContextDependentDelegate) {
return f()
} }
return withTowerDataCleanup { return withTowerDataCleanup {
addLocalScope(FirLocalScope(holder.session)) addLocalScope(FirLocalScope(holder.session))
@@ -671,6 +669,11 @@ class BodyResolveContext(
} }
} }
@OptIn(PrivateForInline::class)
fun storeContextForAnonymousFunction(anonymousFunction: FirAnonymousFunction) {
specialTowerDataContexts.storeAnonymousFunctionContext(anonymousFunction.symbol, towerDataContext)
}
@OptIn(PrivateForInline::class) @OptIn(PrivateForInline::class)
inline fun <T> withField( inline fun <T> withField(
field: FirField, field: FirField,
@@ -718,9 +718,8 @@ open class FirDeclarationsResolveTransformer(transformer: FirAbstractBodyResolve
} }
return when (data) { return when (data) {
is ResolutionMode.ContextDependent, is ResolutionMode.ContextDependentDelegate -> { is ResolutionMode.ContextDependent, is ResolutionMode.ContextDependentDelegate -> {
context.withAnonymousFunction(anonymousFunction, components, data) { context.storeContextForAnonymousFunction(anonymousFunction)
anonymousFunction anonymousFunction
}
} }
is ResolutionMode.LambdaResolution -> { is ResolutionMode.LambdaResolution -> {
val expectedReturnTypeRef = val expectedReturnTypeRef =