[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,
f: () -> T
): T {
require(mode !is ResolutionMode.ContextDependent && mode !is ResolutionMode.ContextDependentDelegate)
if (mode !is ResolutionMode.LambdaResolution) {
specialTowerDataContexts.storeAnonymousFunctionContext(anonymousFunction.symbol, towerDataContext)
}
if (mode is ResolutionMode.ContextDependent || mode is ResolutionMode.ContextDependentDelegate) {
return f()
storeContextForAnonymousFunction(anonymousFunction)
}
return withTowerDataCleanup {
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)
inline fun <T> withField(
field: FirField,
@@ -718,9 +718,8 @@ open class FirDeclarationsResolveTransformer(transformer: FirAbstractBodyResolve
}
return when (data) {
is ResolutionMode.ContextDependent, is ResolutionMode.ContextDependentDelegate -> {
context.withAnonymousFunction(anonymousFunction, components, data) {
anonymousFunction
}
context.storeContextForAnonymousFunction(anonymousFunction)
anonymousFunction
}
is ResolutionMode.LambdaResolution -> {
val expectedReturnTypeRef =