[FIR] Cleanup storing context for lambdas during body resolution
This commit is contained in:
committed by
Space Team
parent
791a7b1c31
commit
c25a5bc9c1
+7
-4
@@ -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,
|
||||||
|
|||||||
+2
-3
@@ -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 =
|
||||||
|
|||||||
Reference in New Issue
Block a user