Partially cache scopes in FIR body resolve transformer

This commit is contained in:
Simon Ogorodnik
2019-04-23 04:20:26 +03:00
committed by Mikhail Glukhikh
parent 861ea6a30f
commit 84fbf4ec25
@@ -96,7 +96,7 @@ open class FirBodyResolveTransformer(val session: FirSession, val implicitTypeOn
override fun transformRegularClass(regularClass: FirRegularClass, data: Any?): CompositeTransformResult<FirDeclaration> {
return withScopeCleanup(scopes) {
val type = regularClass.defaultType()
scopes.addIfNotNull(type.scope(session, ScopeSession()))
scopes.addIfNotNull(type.scope(session, scopeSession))
withLabelAndReceiverType(regularClass.name, regularClass, type) {
super.transformRegularClass(regularClass, data)
}
@@ -142,6 +142,8 @@ open class FirBodyResolveTransformer(val session: FirSession, val implicitTypeOn
return result
}
val scopeSession = ScopeSession()
val scopes = mutableListOf<FirScope>()
private val localScopes = mutableListOf<FirLocalScope>()
@@ -271,7 +273,7 @@ open class FirBodyResolveTransformer(val session: FirSession, val implicitTypeOn
val receiverTypeRef = anonymousFunction.receiverTypeRef
fun transform(): FirAnonymousFunction {
return withScopeCleanup(scopes) {
scopes.addIfNotNull(receiverTypeRef?.coneTypeSafe()?.scope(session, ScopeSession()))
scopes.addIfNotNull(receiverTypeRef?.coneTypeSafe()?.scope(session, scopeSession))
val result =
super.transformAnonymousFunction(
anonymousFunction,
@@ -602,7 +604,7 @@ open class FirBodyResolveTransformer(val session: FirSession, val implicitTypeOn
fun transform(): CompositeTransformResult<FirDeclaration> {
localScopes.lastOrNull()?.storeDeclaration(namedFunction)
return withScopeCleanup(scopes) {
scopes.addIfNotNull(receiverTypeRef?.coneTypeSafe()?.scope(session, ScopeSession()))
scopes.addIfNotNull(receiverTypeRef?.coneTypeSafe()?.scope(session, scopeSession))
val result = super.transformNamedFunction(namedFunction, namedFunction.returnTypeRef).single as FirNamedFunction