diff --git a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/JsLoweringPhases.kt b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/JsLoweringPhases.kt index cfe8f7ba1a5..30d87f6ff31 100644 --- a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/JsLoweringPhases.kt +++ b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/JsLoweringPhases.kt @@ -21,7 +21,7 @@ import org.jetbrains.kotlin.ir.backend.js.lower.calls.CallsLowering import org.jetbrains.kotlin.ir.backend.js.lower.cleanup.CleanupLowering import org.jetbrains.kotlin.ir.backend.js.lower.coroutines.JsSuspendFunctionsLowering import org.jetbrains.kotlin.ir.backend.js.lower.inline.CopyInlineFunctionBodyLowering -import org.jetbrains.kotlin.ir.backend.js.lower.inline.RemoveInlineFunctionsWithReifiedTypeParametersLowering +import org.jetbrains.kotlin.ir.backend.js.lower.inline.RemoveInlineDeclarationsWithReifiedTypeParametersLowering import org.jetbrains.kotlin.ir.declarations.IrFile import org.jetbrains.kotlin.ir.declarations.IrModuleFragment @@ -234,8 +234,8 @@ private val copyInlineFunctionBodyLoweringPhase = makeDeclarationTransformerPhas prerequisite = setOf(functionInliningPhase) ) -private val removeInlineFunctionsWithReifiedTypeParametersLoweringPhase = makeDeclarationTransformerPhase( - { RemoveInlineFunctionsWithReifiedTypeParametersLowering() }, +private val removeInlineDeclarationsWithReifiedTypeParametersLoweringPhase = makeDeclarationTransformerPhase( + { RemoveInlineDeclarationsWithReifiedTypeParametersLowering() }, name = "RemoveInlineFunctionsWithReifiedTypeParametersLowering", description = "Remove Inline functions with reified parameters from context", prerequisite = setOf(functionInliningPhase) @@ -571,7 +571,7 @@ private val typeOperatorLoweringPhase = makeBodyLoweringPhase( description = "Lower IrTypeOperator with corresponding logic", prerequisite = setOf( bridgesConstructionPhase, - removeInlineFunctionsWithReifiedTypeParametersLoweringPhase, + removeInlineDeclarationsWithReifiedTypeParametersLoweringPhase, singleAbstractMethodPhase, errorExpressionLoweringPhase ) ) @@ -704,7 +704,7 @@ val loweringList = listOf( localClassesExtractionFromInlineFunctionsPhase, functionInliningPhase, copyInlineFunctionBodyLoweringPhase, - removeInlineFunctionsWithReifiedTypeParametersLoweringPhase, + removeInlineDeclarationsWithReifiedTypeParametersLoweringPhase, createScriptFunctionsPhase, callableReferenceLowering, singleAbstractMethodPhase, diff --git a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/inline/RemoveInlineFunctionsWithReifiedTypeParametersLowering.kt b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/inline/RemoveInlineDeclarationsWithReifiedTypeParametersLowering.kt similarity index 78% rename from compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/inline/RemoveInlineFunctionsWithReifiedTypeParametersLowering.kt rename to compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/inline/RemoveInlineDeclarationsWithReifiedTypeParametersLowering.kt index c7e0a16fdf9..043f1fd8d93 100644 --- a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/inline/RemoveInlineFunctionsWithReifiedTypeParametersLowering.kt +++ b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/inline/RemoveInlineDeclarationsWithReifiedTypeParametersLowering.kt @@ -1,5 +1,5 @@ /* - * Copyright 2010-2018 JetBrains s.r.o. and Kotlin Programming Language contributors. + * Copyright 2010-2020 JetBrains s.r.o. and Kotlin Programming Language contributors. * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. */ @@ -9,15 +9,19 @@ import org.jetbrains.kotlin.backend.common.DeclarationTransformer import org.jetbrains.kotlin.ir.backend.js.JsIrBackendContext import org.jetbrains.kotlin.ir.declarations.IrDeclaration import org.jetbrains.kotlin.ir.declarations.IrFunction +import org.jetbrains.kotlin.ir.declarations.IrProperty import org.jetbrains.kotlin.ir.declarations.IrValueParameter import org.jetbrains.kotlin.ir.expressions.IrBlockBody import org.jetbrains.kotlin.ir.util.deepCopyWithSymbols -class RemoveInlineFunctionsWithReifiedTypeParametersLowering: DeclarationTransformer { +class RemoveInlineDeclarationsWithReifiedTypeParametersLowering: DeclarationTransformer { override fun transformFlat(declaration: IrDeclaration): List? { + fun IrFunction.isInlineFunWithReifiedParameter() = isInline && typeParameters.any { it.isReified } - if (declaration is IrFunction && declaration.isInline && declaration.typeParameters.any { it.isReified }) { + if (declaration is IrFunction && declaration.isInlineFunWithReifiedParameter() || + declaration is IrProperty && declaration.getter?.isInlineFunWithReifiedParameter() == true + ) { return emptyList() } diff --git a/compiler/ir/backend.wasm/src/org/jetbrains/kotlin/backend/wasm/WasmLoweringPhases.kt b/compiler/ir/backend.wasm/src/org/jetbrains/kotlin/backend/wasm/WasmLoweringPhases.kt index 56b32d80129..68f2e0a271e 100644 --- a/compiler/ir/backend.wasm/src/org/jetbrains/kotlin/backend/wasm/WasmLoweringPhases.kt +++ b/compiler/ir/backend.wasm/src/org/jetbrains/kotlin/backend/wasm/WasmLoweringPhases.kt @@ -1,5 +1,5 @@ /* - * Copyright 2010-2019 JetBrains s.r.o. and Kotlin Programming Language contributors. + * Copyright 2010-2020 JetBrains s.r.o. and Kotlin Programming Language contributors. * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. */ @@ -12,7 +12,7 @@ import org.jetbrains.kotlin.backend.common.lower.loops.ForLoopsLowering import org.jetbrains.kotlin.backend.common.phaser.* import org.jetbrains.kotlin.backend.wasm.lower.* import org.jetbrains.kotlin.ir.backend.js.lower.* -import org.jetbrains.kotlin.ir.backend.js.lower.inline.RemoveInlineFunctionsWithReifiedTypeParametersLowering +import org.jetbrains.kotlin.ir.backend.js.lower.inline.RemoveInlineDeclarationsWithReifiedTypeParametersLowering import org.jetbrains.kotlin.ir.declarations.IrModuleFragment import org.jetbrains.kotlin.ir.util.patchDeclarationParents @@ -96,8 +96,8 @@ private val functionInliningPhase = makeCustomWasmModulePhase( prerequisite = setOf(expectDeclarationsRemovingPhase) ) -private val removeInlineFunctionsWithReifiedTypeParametersLoweringPhase = makeWasmModulePhase( - { RemoveInlineFunctionsWithReifiedTypeParametersLowering() }, +private val removeInlineDeclarationsWithReifiedTypeParametersLoweringPhase = makeWasmModulePhase( + { RemoveInlineDeclarationsWithReifiedTypeParametersLowering() }, name = "RemoveInlineFunctionsWithReifiedTypeParametersLowering", description = "Remove Inline functions with reified parameters from context", prerequisite = setOf(functionInliningPhase) @@ -461,7 +461,7 @@ val wasmPhases = NamedCompilerPhase( defaultArgumentPatchOverridesPhase then defaultParameterInjectorPhase then defaultParameterCleanerPhase then - removeInlineFunctionsWithReifiedTypeParametersLoweringPhase then + removeInlineDeclarationsWithReifiedTypeParametersLoweringPhase then // TODO: // multipleCatchesLoweringPhase then