IR: refactor resolveFakeOverride call sites
Split it to 4 functions for clarity: resolveFakeOverride, resolveFakeOverrideOrFail, resolveFakeOverrideMaybeAbstract, resolveFakeOverrideMaybeAbstractOrFail. Remove/inline duplicated utilities and remove unused parameters.
This commit is contained in:
committed by
Space Team
parent
e52529a1d1
commit
b5ba9ee671
+1
-1
@@ -778,7 +778,7 @@ private fun shouldDeclarationBeExported(declaration: IrDeclarationWithName, cont
|
||||
|
||||
fun IrOverridableDeclaration<*>.isAllowedFakeOverriddenDeclaration(context: JsIrBackendContext): Boolean {
|
||||
val firstExportedRealOverride = runIf(isFakeOverride) {
|
||||
resolveFakeOverrideOrNull(allowAbstract = true) { it === this || it.parentClassOrNull?.isExported(context) != true }
|
||||
resolveFakeOverrideMaybeAbstract { it === this || it.parentClassOrNull?.isExported(context) != true }
|
||||
}
|
||||
|
||||
if (firstExportedRealOverride?.parentClassOrNull.isExportedInterface(context)) {
|
||||
|
||||
+7
-9
@@ -6,14 +6,16 @@
|
||||
package org.jetbrains.kotlin.ir.backend.js.ic
|
||||
|
||||
import org.jetbrains.kotlin.ir.IrElement
|
||||
import org.jetbrains.kotlin.ir.declarations.*
|
||||
import org.jetbrains.kotlin.ir.declarations.IrDeclaration
|
||||
import org.jetbrains.kotlin.ir.declarations.IrFile
|
||||
import org.jetbrains.kotlin.ir.declarations.IrFunction
|
||||
import org.jetbrains.kotlin.ir.declarations.IrSimpleFunction
|
||||
import org.jetbrains.kotlin.ir.expressions.IrCall
|
||||
import org.jetbrains.kotlin.ir.expressions.IrFunctionReference
|
||||
import org.jetbrains.kotlin.ir.symbols.IrSymbol
|
||||
import org.jetbrains.kotlin.ir.util.IdSignature
|
||||
import org.jetbrains.kotlin.ir.util.isFakeOverride
|
||||
import org.jetbrains.kotlin.ir.util.render
|
||||
import org.jetbrains.kotlin.ir.util.resolveFakeOverride
|
||||
import org.jetbrains.kotlin.ir.util.resolveFakeOverrideOrFail
|
||||
import org.jetbrains.kotlin.ir.visitors.IrElementVisitorVoid
|
||||
import org.jetbrains.kotlin.ir.visitors.acceptChildrenVoid
|
||||
import org.jetbrains.kotlin.ir.visitors.acceptVoid
|
||||
@@ -35,12 +37,8 @@ internal class IdSignatureHashCalculator(private val icHasher: ICHasher) {
|
||||
|
||||
private val IrFunction.inlineFunctionFlatHash: ICHash
|
||||
get() = inlineFunctionFlatHashes.getOrPut(this) {
|
||||
val flatHash = if (isFakeOverride && this is IrSimpleFunction) {
|
||||
resolveFakeOverride()?.let { icHasher.calculateIrFunctionHash(it) }
|
||||
?: icError("can not resolve fake override for ${render()}")
|
||||
} else {
|
||||
icHasher.calculateIrFunctionHash(this)
|
||||
}
|
||||
val function = if (isFakeOverride && this is IrSimpleFunction) resolveFakeOverrideOrFail() else this
|
||||
val flatHash = icHasher.calculateIrFunctionHash(function)
|
||||
ICHash(symbol.calculateSymbolHash().hash.combineWith(flatHash.hash))
|
||||
}
|
||||
|
||||
|
||||
+6
@@ -248,3 +248,9 @@ data class IrBasedFunctionHandle(val function: IrSimpleFunction) : FunctionHandl
|
||||
override fun getOverridden() =
|
||||
function.overriddenSymbols.map { IrBasedFunctionHandle(it.owner) }
|
||||
}
|
||||
|
||||
private fun IrSimpleFunction.findInterfaceImplementation(): IrSimpleFunction? {
|
||||
if (isReal) return null
|
||||
|
||||
return resolveFakeOverride()?.run { if (parentAsClass.isInterface) this else null }
|
||||
}
|
||||
|
||||
+1
-1
@@ -195,7 +195,7 @@ fun translateCall(
|
||||
|
||||
expression.superQualifierSymbol?.let { superQualifier ->
|
||||
val (target: IrSimpleFunction, klass: IrClass) = if (superQualifier.owner.isInterface) {
|
||||
val impl = function.resolveFakeOverride()!!
|
||||
val impl = function.resolveFakeOverrideOrFail()
|
||||
Pair(impl, impl.parentAsClass)
|
||||
} else {
|
||||
Pair(function, superQualifier.owner)
|
||||
|
||||
Reference in New Issue
Block a user