[FIR] Don't call inline lambda twice in withFullBodyResolve
This commit is contained in:
+7
-3
@@ -59,12 +59,16 @@ abstract class FirAbstractBodyResolveTransformer(phase: FirResolvePhase) : FirAb
|
||||
|
||||
@OptIn(PrivateForInline::class)
|
||||
internal inline fun <T> withFullBodyResolve(crossinline l: () -> T): T {
|
||||
if (!implicitTypeOnly) return l()
|
||||
implicitTypeOnly = false
|
||||
val shouldSwitchMode = implicitTypeOnly
|
||||
if (shouldSwitchMode) {
|
||||
implicitTypeOnly = false
|
||||
}
|
||||
return try {
|
||||
l()
|
||||
} finally {
|
||||
implicitTypeOnly = true
|
||||
if (shouldSwitchMode) {
|
||||
implicitTypeOnly = true
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+11
-10
@@ -91,10 +91,9 @@ open class FirDeclarationsResolveTransformer(transformer: FirBodyResolveTransfor
|
||||
}
|
||||
|
||||
protected inline fun <T> withTypeParametersOf(declaration: FirMemberDeclaration, crossinline l: () -> T): T {
|
||||
val scope = createTypeParameterScope(declaration) ?: return l()
|
||||
|
||||
val scope = createTypeParameterScope(declaration)
|
||||
return context.withTowerDataCleanup {
|
||||
context.addNonLocalTowerDataElement(scope.asTowerDataElement(isLocal = false))
|
||||
scope?.let { context.addNonLocalTowerDataElement(it.asTowerDataElement(isLocal = false)) }
|
||||
l()
|
||||
}
|
||||
}
|
||||
@@ -111,14 +110,16 @@ open class FirDeclarationsResolveTransformer(transformer: FirBodyResolveTransfor
|
||||
}
|
||||
return property.compose()
|
||||
}
|
||||
|
||||
if (property.isLocal) {
|
||||
prepareSignatureForBodyResolve(property)
|
||||
property.transformStatus(this, property.resolveStatus(property.status).mode())
|
||||
property.getter?.let { it.transformStatus(this, it.resolveStatus(it.status).mode()) }
|
||||
property.setter?.let { it.transformStatus(this, it.resolveStatus(it.status).mode()) }
|
||||
return transformLocalVariable(property)
|
||||
}
|
||||
|
||||
return withTypeParametersOf(property) {
|
||||
if (property.isLocal) {
|
||||
prepareSignatureForBodyResolve(property)
|
||||
property.transformStatus(this, property.resolveStatus(property.status).mode())
|
||||
property.getter?.let { it.transformStatus(this, it.resolveStatus(it.status).mode()) }
|
||||
property.setter?.let { it.transformStatus(this, it.resolveStatus(it.status).mode()) }
|
||||
return@withTypeParametersOf transformLocalVariable(property)
|
||||
}
|
||||
val returnTypeRef = property.returnTypeRef
|
||||
if (returnTypeRef !is FirImplicitTypeRef && implicitTypeOnly) return@withTypeParametersOf property.compose()
|
||||
if (property.resolvePhase == transformerPhase) return@withTypeParametersOf property.compose()
|
||||
|
||||
Reference in New Issue
Block a user