diff --git a/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/lower/inline/FunctionInlining.kt b/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/lower/inline/FunctionInlining.kt index cbf52207607..b97a047cbd9 100644 --- a/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/lower/inline/FunctionInlining.kt +++ b/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/lower/inline/FunctionInlining.kt @@ -42,11 +42,15 @@ fun IrExpression.isAdaptedFunctionReference() = this is IrBlock && this.origin == IrStatementOrigin.ADAPTED_FUNCTION_REFERENCE interface InlineFunctionResolver { - fun getFunctionDeclaration(symbol: IrFunctionSymbol): IrFunction - fun getFunctionSymbol(irFunction: IrFunction): IrFunctionSymbol + fun getFunctionDeclaration(symbol: IrFunctionSymbol): IrFunction = symbol.owner + fun getFunctionSymbol(irFunction: IrFunction): IrFunctionSymbol = irFunction.symbol fun shouldExcludeFunctionFromInlining(symbol: IrFunctionSymbol): Boolean { return Symbols.isLateinitIsInitializedPropertyGetter(symbol) || Symbols.isTypeOfIntrinsic(symbol) } + + companion object { + val TRIVIAL = object : InlineFunctionResolver {} + } } fun IrFunction.isTopLevelInPackage(name: String, packageName: String): Boolean { @@ -63,7 +67,7 @@ fun IrFunction.isBuiltInSuspendCoroutineUninterceptedOrReturn(): Boolean = StandardNames.COROUTINES_INTRINSICS_PACKAGE_FQ_NAME.asString() ) -open class DefaultInlineFunctionResolver(open val context: CommonBackendContext) : InlineFunctionResolver { +open class InlineFunctionResolverReplacingCoroutineIntrinsics(open val context: CommonBackendContext) : InlineFunctionResolver { override fun getFunctionDeclaration(symbol: IrFunctionSymbol): IrFunction { val function = symbol.owner // TODO: Remove these hacks when coroutine intrinsics are fixed. @@ -77,15 +81,11 @@ open class DefaultInlineFunctionResolver(open val context: CommonBackendContext) else -> function } } - - override fun getFunctionSymbol(irFunction: IrFunction): IrFunctionSymbol { - return irFunction.symbol - } } class FunctionInlining( val context: CommonBackendContext, - private val inlineFunctionResolver: InlineFunctionResolver = DefaultInlineFunctionResolver(context), + private val inlineFunctionResolver: InlineFunctionResolver = InlineFunctionResolver.TRIVIAL, private val innerClassesSupport: InnerClassesSupport? = null, private val insertAdditionalImplicitCasts: Boolean = false, private val alwaysCreateTemporaryVariablesForArguments: Boolean = false, diff --git a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/inline/SaveInlineFunctionsBeforeInlining.kt b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/inline/SaveInlineFunctionsBeforeInlining.kt index 983c50063a2..38df370493b 100644 --- a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/inline/SaveInlineFunctionsBeforeInlining.kt +++ b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/inline/SaveInlineFunctionsBeforeInlining.kt @@ -6,10 +6,8 @@ package org.jetbrains.kotlin.ir.backend.js.lower.inline import org.jetbrains.kotlin.backend.common.DeclarationTransformer -import org.jetbrains.kotlin.backend.common.lower.inline.DefaultInlineFunctionResolver +import org.jetbrains.kotlin.backend.common.lower.inline.InlineFunctionResolverReplacingCoroutineIntrinsics import org.jetbrains.kotlin.ir.backend.js.JsIrBackendContext -import org.jetbrains.kotlin.ir.backend.js.lazy2 -import org.jetbrains.kotlin.ir.backend.js.utils.compileSuspendAsJsGenerator import org.jetbrains.kotlin.ir.declarations.IrDeclaration import org.jetbrains.kotlin.ir.declarations.IrFunction import org.jetbrains.kotlin.ir.deepCopyWithVariables @@ -30,7 +28,7 @@ internal class SaveInlineFunctionsBeforeInlining(context: JsIrBackendContext) : } } -internal class JsInlineFunctionResolver(context: JsIrBackendContext) : DefaultInlineFunctionResolver(context) { +internal class JsInlineFunctionResolver(context: JsIrBackendContext) : InlineFunctionResolverReplacingCoroutineIntrinsics(context) { private val enumEntriesIntrinsic = context.intrinsics.enumEntriesIntrinsic private val inlineFunctionsBeforeInlining = context.mapping.inlineFunctionsBeforeInlining private val inlineFunctionsBeforeInliningSymbols = hashMapOf() diff --git a/compiler/ir/backend.jvm/lower/src/org/jetbrains/kotlin/backend/jvm/JvmLoweringPhases.kt b/compiler/ir/backend.jvm/lower/src/org/jetbrains/kotlin/backend/jvm/JvmLoweringPhases.kt index 885b662a228..b5123b4361e 100644 --- a/compiler/ir/backend.jvm/lower/src/org/jetbrains/kotlin/backend/jvm/JvmLoweringPhases.kt +++ b/compiler/ir/backend.jvm/lower/src/org/jetbrains/kotlin/backend/jvm/JvmLoweringPhases.kt @@ -280,20 +280,11 @@ private val kotlinNothingValueExceptionPhase = makeIrFilePhase - class JvmInlineFunctionResolver : InlineFunctionResolver { - override fun getFunctionDeclaration(symbol: IrFunctionSymbol): IrFunction { - return symbol.owner - } - - override fun getFunctionSymbol(irFunction: IrFunction): IrFunctionSymbol { - return irFunction.symbol - } - } - if (!context.irInlinerIsEnabled()) return@makeIrModulePhase FileLoweringPass.Empty FunctionInlining( - context, JvmInlineFunctionResolver(), context.innerClassesSupport, + context, + innerClassesSupport = context.innerClassesSupport, alwaysCreateTemporaryVariablesForArguments = true, regenerateInlinedAnonymousObjects = true, inlineArgumentsWithTheirOriginalTypeAndOffset = true diff --git a/compiler/ir/backend.wasm/src/org/jetbrains/kotlin/backend/wasm/lower/WasmInlineFunctionResolver.kt b/compiler/ir/backend.wasm/src/org/jetbrains/kotlin/backend/wasm/lower/WasmInlineFunctionResolver.kt index 2c00bc68d72..06edace04e5 100644 --- a/compiler/ir/backend.wasm/src/org/jetbrains/kotlin/backend/wasm/lower/WasmInlineFunctionResolver.kt +++ b/compiler/ir/backend.wasm/src/org/jetbrains/kotlin/backend/wasm/lower/WasmInlineFunctionResolver.kt @@ -5,11 +5,11 @@ package org.jetbrains.kotlin.backend.wasm.lower -import org.jetbrains.kotlin.backend.common.lower.inline.DefaultInlineFunctionResolver +import org.jetbrains.kotlin.backend.common.lower.inline.InlineFunctionResolverReplacingCoroutineIntrinsics import org.jetbrains.kotlin.backend.wasm.WasmBackendContext import org.jetbrains.kotlin.ir.symbols.IrFunctionSymbol -class WasmInlineFunctionResolver(context: WasmBackendContext) : DefaultInlineFunctionResolver(context) { +class WasmInlineFunctionResolver(context: WasmBackendContext) : InlineFunctionResolverReplacingCoroutineIntrinsics(context) { private val enumEntriesIntrinsic = context.wasmSymbols.enumEntriesIntrinsic override fun shouldExcludeFunctionFromInlining(symbol: IrFunctionSymbol): Boolean { diff --git a/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/lower/NativeInlineFunctionResolver.kt b/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/lower/NativeInlineFunctionResolver.kt index cac406df82f..fe2869709e2 100644 --- a/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/lower/NativeInlineFunctionResolver.kt +++ b/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/lower/NativeInlineFunctionResolver.kt @@ -30,7 +30,7 @@ internal class InlineFunctionsSupport(mapping: NativeMapping) { } // TODO: This is a bit hacky. Think about adopting persistent IR ideas. -internal class NativeInlineFunctionResolver(override val context: Context, val generationState: NativeGenerationState) : DefaultInlineFunctionResolver(context) { +internal class NativeInlineFunctionResolver(override val context: Context, val generationState: NativeGenerationState) : InlineFunctionResolverReplacingCoroutineIntrinsics(context) { override fun getFunctionDeclaration(symbol: IrFunctionSymbol): IrFunction { val function = super.getFunctionDeclaration(symbol)