From 39e1635c411bc1e5e270d2925ec2fd1d5b51aaec Mon Sep 17 00:00:00 2001 From: Jinseong Jeon Date: Sun, 19 Apr 2020 00:23:15 -0700 Subject: [PATCH] [FIR2IR] Pre-cache original function type parameters for fake overrides --- .../jetbrains/kotlin/fir/backend/Fir2IrClassifierStorage.kt | 1 - .../jetbrains/kotlin/fir/backend/Fir2IrDeclarationStorage.kt | 2 ++ .../kotlin/fir/backend/generators/ClassMemberGenerator.kt | 2 +- .../kotlin/fir/backend/generators/FakeOverrideGenerator.kt | 3 +++ compiler/testData/codegen/box/coroutines/dispatchResume.kt | 1 - .../coroutines/suspendFunctionAsCoroutine/dispatchResume.kt | 1 - 6 files changed, 6 insertions(+), 4 deletions(-) diff --git a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrClassifierStorage.kt b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrClassifierStorage.kt index a30cdf8f243..eb1f7eadab7 100644 --- a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrClassifierStorage.kt +++ b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrClassifierStorage.kt @@ -18,7 +18,6 @@ import org.jetbrains.kotlin.ir.declarations.* import org.jetbrains.kotlin.ir.declarations.impl.IrClassImpl import org.jetbrains.kotlin.ir.declarations.impl.IrEnumEntryImpl import org.jetbrains.kotlin.ir.declarations.impl.IrTypeParameterImpl -import org.jetbrains.kotlin.ir.declarations.impl.IrValueParameterImpl import org.jetbrains.kotlin.ir.descriptors.* import org.jetbrains.kotlin.ir.expressions.impl.IrEnumConstructorCallImpl import org.jetbrains.kotlin.ir.expressions.impl.IrExpressionBodyImpl diff --git a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrDeclarationStorage.kt b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrDeclarationStorage.kt index fb6b1067269..13b11d58180 100644 --- a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrDeclarationStorage.kt +++ b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrDeclarationStorage.kt @@ -214,6 +214,7 @@ class Fir2IrDeclarationStorage( if (functionSymbol is FirNamedFunctionSymbol) { val fakeOverrideSymbol = FirClassSubstitutionScope.createFakeOverrideFunction(session, functionSymbol.fir, functionSymbol) + classifierStorage.preCacheTypeParameters(functionSymbol.fir) irClass.declarations += createIrFunction(fakeOverrideSymbol.fir, irClass) } } @@ -221,6 +222,7 @@ class Fir2IrDeclarationStorage( if (propertySymbol is FirPropertySymbol) { val fakeOverrideSymbol = FirClassSubstitutionScope.createFakeOverrideProperty(session, propertySymbol.fir, propertySymbol) + classifierStorage.preCacheTypeParameters(propertySymbol.fir) irClass.declarations += createIrProperty(fakeOverrideSymbol.fir, irClass) } } diff --git a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/generators/ClassMemberGenerator.kt b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/generators/ClassMemberGenerator.kt index 282d14eafe5..de53fbfe748 100644 --- a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/generators/ClassMemberGenerator.kt +++ b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/generators/ClassMemberGenerator.kt @@ -33,7 +33,7 @@ internal class ClassMemberGenerator( ) : Fir2IrComponents by components { private val fakeOverrideGenerator = FakeOverrideGenerator( - session, components.scopeSession, declarationStorage, conversionScope, fakeOverrideMode + session, components.scopeSession, classifierStorage, declarationStorage, conversionScope, fakeOverrideMode ) private fun FirTypeRef.toIrType(): IrType = with(typeConverter) { toIrType() } diff --git a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/generators/FakeOverrideGenerator.kt b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/generators/FakeOverrideGenerator.kt index 6ae3b73242b..fecaf40aeaf 100644 --- a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/generators/FakeOverrideGenerator.kt +++ b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/generators/FakeOverrideGenerator.kt @@ -29,6 +29,7 @@ import org.jetbrains.kotlin.name.Name internal class FakeOverrideGenerator( private val session: FirSession, private val scopeSession: ScopeSession, + private val classifierStorage: Fir2IrClassifierStorage, private val declarationStorage: Fir2IrDeclarationStorage, private val conversionScope: Fir2IrConversionScope, private val fakeOverrideMode: FakeOverrideMode @@ -109,6 +110,7 @@ internal class FakeOverrideGenerator( ) val fakeOverrideFunction = fakeOverrideSymbol.fir + classifierStorage.preCacheTypeParameters(originalFunction) val irFunction = declarationStorage.createIrFunction( fakeOverrideFunction, irParent = this, thisReceiverOwner = declarationStorage.findIrParent(originalFunction) as? IrClass, @@ -146,6 +148,7 @@ internal class FakeOverrideGenerator( ) val fakeOverrideProperty = fakeOverrideSymbol.fir + classifierStorage.preCacheTypeParameters(originalProperty) val irProperty = declarationStorage.createIrProperty( fakeOverrideProperty, irParent = this, thisReceiverOwner = declarationStorage.findIrParent(originalProperty) as? IrClass, diff --git a/compiler/testData/codegen/box/coroutines/dispatchResume.kt b/compiler/testData/codegen/box/coroutines/dispatchResume.kt index 34ceae1ef83..5f84e849ae1 100644 --- a/compiler/testData/codegen/box/coroutines/dispatchResume.kt +++ b/compiler/testData/codegen/box/coroutines/dispatchResume.kt @@ -1,4 +1,3 @@ -// IGNORE_BACKEND_FIR: JVM_IR // WITH_RUNTIME // WITH_COROUTINES // COMMON_COROUTINES_TEST diff --git a/compiler/testData/codegen/box/coroutines/suspendFunctionAsCoroutine/dispatchResume.kt b/compiler/testData/codegen/box/coroutines/suspendFunctionAsCoroutine/dispatchResume.kt index fe058b8ae71..345b9db67e0 100644 --- a/compiler/testData/codegen/box/coroutines/suspendFunctionAsCoroutine/dispatchResume.kt +++ b/compiler/testData/codegen/box/coroutines/suspendFunctionAsCoroutine/dispatchResume.kt @@ -1,4 +1,3 @@ -// IGNORE_BACKEND_FIR: JVM_IR // WITH_RUNTIME // WITH_COROUTINES // COMMON_COROUTINES_TEST