[IR] Change the return type of getFunctionDeclaration to be nullable
#KT-64807
This commit is contained in:
+2
-2
@@ -37,8 +37,8 @@ internal class JsInlineFunctionResolver(context: JsIrBackendContext) : InlineFun
|
|||||||
return symbol == enumEntriesIntrinsic || super.shouldExcludeFunctionFromInlining(symbol)
|
return symbol == enumEntriesIntrinsic || super.shouldExcludeFunctionFromInlining(symbol)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun getFunctionDeclaration(symbol: IrFunctionSymbol): IrFunction {
|
override fun getFunctionDeclaration(symbol: IrFunctionSymbol): IrFunction? {
|
||||||
val function = super.getFunctionDeclaration(symbol)
|
val function = super.getFunctionDeclaration(symbol) ?: return null
|
||||||
return inlineFunctionsBeforeInlining[function] ?: return function
|
return inlineFunctionsBeforeInlining[function] ?: return function
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -39,7 +39,10 @@ import org.jetbrains.kotlin.name.Name
|
|||||||
import org.jetbrains.kotlin.util.OperatorNameConventions
|
import org.jetbrains.kotlin.util.OperatorNameConventions
|
||||||
|
|
||||||
abstract class InlineFunctionResolver {
|
abstract class InlineFunctionResolver {
|
||||||
open fun getFunctionDeclaration(symbol: IrFunctionSymbol): IrFunction = symbol.owner
|
open fun getFunctionDeclaration(symbol: IrFunctionSymbol): IrFunction? {
|
||||||
|
return symbol.owner
|
||||||
|
}
|
||||||
|
|
||||||
open fun shouldExcludeFunctionFromInlining(symbol: IrFunctionSymbol): Boolean {
|
open fun shouldExcludeFunctionFromInlining(symbol: IrFunctionSymbol): Boolean {
|
||||||
return Symbols.isLateinitIsInitializedPropertyGetter(symbol) || Symbols.isTypeOfIntrinsic(symbol)
|
return Symbols.isLateinitIsInitializedPropertyGetter(symbol) || Symbols.isTypeOfIntrinsic(symbol)
|
||||||
}
|
}
|
||||||
@@ -56,7 +59,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 = symbol.owner
|
||||||
// TODO: Remove these hacks when coroutine intrinsics are fixed.
|
// TODO: Remove these hacks when coroutine intrinsics are fixed.
|
||||||
return when {
|
return when {
|
||||||
@@ -106,7 +109,7 @@ class FunctionInlining(
|
|||||||
|
|
||||||
val target = (callee as? IrSimpleFunction)?.resolveFakeOverride() ?: callee
|
val target = (callee as? IrSimpleFunction)?.resolveFakeOverride() ?: callee
|
||||||
val actualCallee = inlineFunctionResolver.getFunctionDeclaration(target.symbol)
|
val actualCallee = inlineFunctionResolver.getFunctionDeclaration(target.symbol)
|
||||||
if (actualCallee.body == null) {
|
if (actualCallee?.body == null) {
|
||||||
return expression
|
return expression
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -382,7 +385,7 @@ class FunctionInlining(
|
|||||||
return inlineFunctionReference(
|
return inlineFunctionReference(
|
||||||
irCall, irFunctionReference,
|
irCall, irFunctionReference,
|
||||||
if (inlinedFunction.needsInlining)
|
if (inlinedFunction.needsInlining)
|
||||||
inlineFunctionResolver.getFunctionDeclaration(inlinedFunction.symbol)
|
inlineFunctionResolver.getFunctionDeclaration(inlinedFunction.symbol) ?: inlinedFunction
|
||||||
else inlinedFunction
|
else inlinedFunction
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|||||||
+2
-2
@@ -32,8 +32,8 @@ internal class InlineFunctionsSupport(mapping: NativeMapping) {
|
|||||||
|
|
||||||
// TODO: This is a bit hacky. Think about adopting persistent IR ideas.
|
// TODO: This is a bit hacky. Think about adopting persistent IR ideas.
|
||||||
internal class NativeInlineFunctionResolver(override val context: Context, val generationState: NativeGenerationState) : InlineFunctionResolverReplacingCoroutineIntrinsics(context) {
|
internal class NativeInlineFunctionResolver(override val context: Context, val generationState: NativeGenerationState) : InlineFunctionResolverReplacingCoroutineIntrinsics(context) {
|
||||||
override fun getFunctionDeclaration(symbol: IrFunctionSymbol): IrFunction {
|
override fun getFunctionDeclaration(symbol: IrFunctionSymbol): IrFunction? {
|
||||||
val function = super.getFunctionDeclaration(symbol)
|
val function = super.getFunctionDeclaration(symbol) ?: return null
|
||||||
|
|
||||||
generationState.inlineFunctionOrigins[function]?.let { return it.irFunction }
|
generationState.inlineFunctionOrigins[function]?.let { return it.irFunction }
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user