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> { override fun transformRegularClass(regularClass: FirRegularClass, data: Any?): CompositeTransformResult<FirDeclaration> {
return withScopeCleanup(scopes) { return withScopeCleanup(scopes) {
val type = regularClass.defaultType() val type = regularClass.defaultType()
scopes.addIfNotNull(type.scope(session, ScopeSession())) scopes.addIfNotNull(type.scope(session, scopeSession))
withLabelAndReceiverType(regularClass.name, regularClass, type) { withLabelAndReceiverType(regularClass.name, regularClass, type) {
super.transformRegularClass(regularClass, data) super.transformRegularClass(regularClass, data)
} }
@@ -142,6 +142,8 @@ open class FirBodyResolveTransformer(val session: FirSession, val implicitTypeOn
return result return result
} }
val scopeSession = ScopeSession()
val scopes = mutableListOf<FirScope>() val scopes = mutableListOf<FirScope>()
private val localScopes = mutableListOf<FirLocalScope>() private val localScopes = mutableListOf<FirLocalScope>()
@@ -271,7 +273,7 @@ open class FirBodyResolveTransformer(val session: FirSession, val implicitTypeOn
val receiverTypeRef = anonymousFunction.receiverTypeRef val receiverTypeRef = anonymousFunction.receiverTypeRef
fun transform(): FirAnonymousFunction { fun transform(): FirAnonymousFunction {
return withScopeCleanup(scopes) { return withScopeCleanup(scopes) {
scopes.addIfNotNull(receiverTypeRef?.coneTypeSafe()?.scope(session, ScopeSession())) scopes.addIfNotNull(receiverTypeRef?.coneTypeSafe()?.scope(session, scopeSession))
val result = val result =
super.transformAnonymousFunction( super.transformAnonymousFunction(
anonymousFunction, anonymousFunction,
@@ -602,7 +604,7 @@ open class FirBodyResolveTransformer(val session: FirSession, val implicitTypeOn
fun transform(): CompositeTransformResult<FirDeclaration> { fun transform(): CompositeTransformResult<FirDeclaration> {
localScopes.lastOrNull()?.storeDeclaration(namedFunction) localScopes.lastOrNull()?.storeDeclaration(namedFunction)
return withScopeCleanup(scopes) { 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 val result = super.transformNamedFunction(namedFunction, namedFunction.returnTypeRef).single as FirNamedFunction