[IR] Forbid to use shouldExcludeFunctionFromInlining as public API

#KT-64807
This commit is contained in:
Ivan Kylchik
2024-02-07 19:15:42 +01:00
committed by Space Team
parent f1bc542d74
commit 0258927d33
@@ -40,10 +40,11 @@ import org.jetbrains.kotlin.util.OperatorNameConventions
abstract class InlineFunctionResolver { abstract class InlineFunctionResolver {
open fun getFunctionDeclaration(symbol: IrFunctionSymbol): IrFunction? { open fun getFunctionDeclaration(symbol: IrFunctionSymbol): IrFunction? {
if (shouldExcludeFunctionFromInlining(symbol)) return null
return symbol.owner return symbol.owner
} }
open fun shouldExcludeFunctionFromInlining(symbol: IrFunctionSymbol): Boolean { protected open fun shouldExcludeFunctionFromInlining(symbol: IrFunctionSymbol): Boolean {
return Symbols.isLateinitIsInitializedPropertyGetter(symbol) || Symbols.isTypeOfIntrinsic(symbol) return Symbols.isLateinitIsInitializedPropertyGetter(symbol) || Symbols.isTypeOfIntrinsic(symbol)
} }
@@ -60,7 +61,7 @@ fun IrFunction.isBuiltInSuspendCoroutineUninterceptedOrReturn(): Boolean =
open class InlineFunctionResolverReplacingCoroutineIntrinsics(open val context: CommonBackendContext) : InlineFunctionResolver() { open class InlineFunctionResolverReplacingCoroutineIntrinsics(open val context: CommonBackendContext) : InlineFunctionResolver() {
override fun getFunctionDeclaration(symbol: IrFunctionSymbol): IrFunction? { override fun getFunctionDeclaration(symbol: IrFunctionSymbol): IrFunction? {
val function = symbol.owner val function = super.getFunctionDeclaration(symbol) ?: return null
// TODO: Remove these hacks when coroutine intrinsics are fixed. // TODO: Remove these hacks when coroutine intrinsics are fixed.
return when { return when {
function.isBuiltInSuspendCoroutineUninterceptedOrReturn() -> function.isBuiltInSuspendCoroutineUninterceptedOrReturn() ->
@@ -104,7 +105,7 @@ class FunctionInlining(
is IrConstructorCall -> expression.symbol.owner is IrConstructorCall -> expression.symbol.owner
else -> return expression else -> return expression
} }
if (!callee.needsInlining || inlineFunctionResolver.shouldExcludeFunctionFromInlining(callee.symbol)) if (!callee.needsInlining)
return expression return expression
val target = (callee as? IrSimpleFunction)?.resolveFakeOverride() ?: callee val target = (callee as? IrSimpleFunction)?.resolveFakeOverride() ?: callee