Skip to content

Commit 2f9b937

Browse files
alexander-gorshenevminamoto79
authored andcommitted
K/N counterpart for:
Got rid of duplicates in resolveFakeOverrides implementations (cherry picked from commit 69c6d99b38d6ca6e845a1167e1f8146a48fc1006)
1 parent 4d1057f commit 2f9b937

File tree

3 files changed

+10
-60
lines changed

3 files changed

+10
-60
lines changed

backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/descriptors/DescriptorUtils.kt

+7-58
Original file line numberDiff line numberDiff line change
@@ -6,11 +6,14 @@
66
package org.jetbrains.kotlin.backend.konan.descriptors
77

88
import org.jetbrains.kotlin.backend.common.atMostOne
9-
import org.jetbrains.kotlin.backend.konan.*
10-
import org.jetbrains.kotlin.backend.konan.ir.*
11-
import org.jetbrains.kotlin.backend.konan.isObjCClass
9+
import org.jetbrains.kotlin.backend.konan.KonanFqNames
10+
import org.jetbrains.kotlin.backend.konan.RuntimeNames
11+
import org.jetbrains.kotlin.backend.konan.binaryTypeIsReference
12+
import org.jetbrains.kotlin.backend.konan.ir.getSuperClassNotAny
13+
import org.jetbrains.kotlin.backend.konan.ir.getSuperInterfaces
14+
import org.jetbrains.kotlin.backend.konan.isInlinedNative
1215
import org.jetbrains.kotlin.backend.konan.llvm.longName
13-
import org.jetbrains.kotlin.descriptors.*
16+
import org.jetbrains.kotlin.descriptors.Modality
1417
import org.jetbrains.kotlin.descriptors.annotations.AnnotationDescriptor
1518
import org.jetbrains.kotlin.ir.declarations.*
1619
import org.jetbrains.kotlin.ir.descriptors.IrBuiltIns
@@ -39,50 +42,6 @@ internal val IrClass.implementedInterfaces: List<IrClass>
3942
superInterfaces).distinct()
4043
}
4144

42-
43-
/**
44-
* Implementation of given method.
45-
*
46-
* TODO: this method is actually a part of resolve and probably duplicates another one
47-
*/
48-
internal fun IrSimpleFunction.resolveFakeOverride(allowAbstract: Boolean = false): IrSimpleFunction {
49-
if (this.isReal) {
50-
return this
51-
}
52-
53-
val visited = mutableSetOf<IrSimpleFunction>()
54-
val realSupers = mutableSetOf<IrSimpleFunction>()
55-
56-
fun findRealSupers(function: IrSimpleFunction) {
57-
if (function in visited) return
58-
visited += function
59-
if (function.isReal) {
60-
realSupers += function
61-
} else {
62-
function.overriddenSymbols.forEach { findRealSupers(it.owner) }
63-
}
64-
}
65-
66-
findRealSupers(this)
67-
68-
if (realSupers.size > 1) {
69-
visited.clear()
70-
71-
fun excludeOverridden(function: IrSimpleFunction) {
72-
if (function in visited) return
73-
visited += function
74-
function.overriddenSymbols.forEach {
75-
realSupers.remove(it.owner)
76-
excludeOverridden(it.owner)
77-
}
78-
}
79-
80-
realSupers.toList().forEach { excludeOverridden(it) }
81-
}
82-
83-
return realSupers.first { allowAbstract || it.modality != Modality.ABSTRACT }
84-
}
85-
8645
internal val IrFunction.isTypedIntrinsic: Boolean
8746
get() = annotations.hasAnnotation(KonanFqNames.typedIntrinsic)
8847

@@ -143,16 +102,6 @@ private fun IrFunction.needBridgeToAt(target: IrFunction, index: Int)
143102
internal fun IrFunction.needBridgeTo(target: IrFunction)
144103
= (0..this.valueParameters.size + 2).any { needBridgeToAt(target, it) }
145104

146-
internal val IrSimpleFunction.target: IrSimpleFunction
147-
get() = (if (modality == Modality.ABSTRACT) this else resolveFakeOverride())
148-
149-
internal val IrFunction.target: IrFunction
150-
get() = when (this) {
151-
is IrSimpleFunction -> this.target
152-
is IrConstructor -> this
153-
else -> error(this)
154-
}
155-
156105
internal enum class BridgeDirection {
157106
NOT_NEEDED,
158107
FROM_VALUE_TYPE,

backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/llvm/CodeGenerator.kt

+1-1
Original file line numberDiff line numberDiff line change
@@ -872,7 +872,7 @@ internal class FunctionGenerationContext(val function: LLVMValueRef,
872872

873873
private fun IrSimpleFunction.findOverriddenMethodOfAny(): IrSimpleFunction? {
874874
if (modality == Modality.ABSTRACT) return null
875-
val resolved = resolveFakeOverride()
875+
val resolved = resolveFakeOverride()!!
876876
if ((resolved.parent as IrClass).isAny()) {
877877
return resolved
878878
}

backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/serialization/IrSerializationUtil.kt

+2-1
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ package org.jetbrains.kotlin.backend.konan.serialization
1919
import org.jetbrains.kotlin.backend.konan.descriptors.resolveFakeOverride
2020
import org.jetbrains.kotlin.descriptors.*
2121
import org.jetbrains.kotlin.ir.declarations.*
22+
import org.jetbrains.kotlin.ir.util.resolveFakeOverride
2223
import org.jetbrains.kotlin.resolve.OverridingUtil
2324

2425
// TODO: move me somewhere
@@ -28,7 +29,7 @@ import org.jetbrains.kotlin.resolve.OverridingUtil
2829
*
2930
* TODO: this method is actually a part of resolve and probably duplicates another one
3031
*/
31-
internal fun IrSimpleFunction.resolveFakeOverrideMaybeAbstract() = this.resolveFakeOverride(allowAbstract = true)
32+
internal fun IrSimpleFunction.resolveFakeOverrideMaybeAbstract() = this.resolveFakeOverride(allowAbstract = true)!!
3233

3334
internal fun IrProperty.resolveFakeOverrideMaybeAbstract() =
3435
this.getter!!.resolveFakeOverrideMaybeAbstract().correspondingPropertySymbol!!.owner

0 commit comments

Comments
 (0)