Try to avoid getting mangled names for synthetic functions
Because some of these functions have parameters with non-denotable types
This commit is contained in:
committed by
SvyatoslavScherbina
parent
bcb706c8ff
commit
a37657127a
+10
-2
@@ -20,6 +20,8 @@ import org.jetbrains.kotlin.backend.konan.*
|
|||||||
import org.jetbrains.kotlin.backend.konan.irasdescriptors.*
|
import org.jetbrains.kotlin.backend.konan.irasdescriptors.*
|
||||||
import org.jetbrains.kotlin.backend.konan.llvm.functionName
|
import org.jetbrains.kotlin.backend.konan.llvm.functionName
|
||||||
import org.jetbrains.kotlin.backend.konan.llvm.localHash
|
import org.jetbrains.kotlin.backend.konan.llvm.localHash
|
||||||
|
import org.jetbrains.kotlin.ir.declarations.IrClass
|
||||||
|
import org.jetbrains.kotlin.ir.util.simpleFunctions
|
||||||
|
|
||||||
internal class OverriddenFunctionDescriptor(
|
internal class OverriddenFunctionDescriptor(
|
||||||
val descriptor: SimpleFunctionDescriptor,
|
val descriptor: SimpleFunctionDescriptor,
|
||||||
@@ -91,7 +93,7 @@ internal class ClassVtablesBuilder(val classDescriptor: ClassDescriptor, val con
|
|||||||
context.getVtableBuilder(superClass).vtableEntries
|
context.getVtableBuilder(superClass).vtableEntries
|
||||||
}
|
}
|
||||||
|
|
||||||
val methods = classDescriptor.sortedContributedMethods
|
val methods = classDescriptor.sortedOverridableOrOverridingMethods
|
||||||
val newVtableSlots = mutableListOf<OverriddenFunctionDescriptor>()
|
val newVtableSlots = mutableListOf<OverriddenFunctionDescriptor>()
|
||||||
|
|
||||||
val inheritedVtableSlots = superVtableEntries.map { superMethod ->
|
val inheritedVtableSlots = superVtableEntries.map { superMethod ->
|
||||||
@@ -125,7 +127,7 @@ internal class ClassVtablesBuilder(val classDescriptor: ClassDescriptor, val con
|
|||||||
}
|
}
|
||||||
|
|
||||||
val methodTableEntries: List<OverriddenFunctionDescriptor> by lazy {
|
val methodTableEntries: List<OverriddenFunctionDescriptor> by lazy {
|
||||||
classDescriptor.sortedContributedMethods
|
classDescriptor.sortedOverridableOrOverridingMethods
|
||||||
.flatMap { method -> method.allOverriddenDescriptors.map { OverriddenFunctionDescriptor(method, it) } }
|
.flatMap { method -> method.allOverriddenDescriptors.map { OverriddenFunctionDescriptor(method, it) } }
|
||||||
.filter { it.canBeCalledVirtually }
|
.filter { it.canBeCalledVirtually }
|
||||||
.distinctBy { Triple(it.overriddenDescriptor.functionName, it.descriptor, it.needBridge) }
|
.distinctBy { Triple(it.overriddenDescriptor.functionName, it.descriptor, it.needBridge) }
|
||||||
@@ -134,3 +136,9 @@ internal class ClassVtablesBuilder(val classDescriptor: ClassDescriptor, val con
|
|||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private val IrClass.sortedOverridableOrOverridingMethods: List<SimpleFunctionDescriptor>
|
||||||
|
get() =
|
||||||
|
this.simpleFunctions()
|
||||||
|
.filter { it.isOverridable || it.overriddenSymbols.isNotEmpty() }
|
||||||
|
.sortedBy { it.functionName.localHash.value }
|
||||||
|
|||||||
-8
@@ -122,14 +122,6 @@ internal val ClassDescriptor.isArray: Boolean
|
|||||||
internal val ClassDescriptor.isInterface: Boolean
|
internal val ClassDescriptor.isInterface: Boolean
|
||||||
get() = (this.kind == ClassKind.INTERFACE)
|
get() = (this.kind == ClassKind.INTERFACE)
|
||||||
|
|
||||||
internal val IrClass.sortedContributedMethods: List<SimpleFunctionDescriptor>
|
|
||||||
get () = contributedMethods.sortedBy {
|
|
||||||
it.functionName.localHash.value
|
|
||||||
}
|
|
||||||
|
|
||||||
internal val IrClass.contributedMethods: List<SimpleFunctionDescriptor>
|
|
||||||
get () = this.simpleFunctions()
|
|
||||||
|
|
||||||
fun ClassDescriptor.isAbstract() = this.modality == Modality.SEALED || this.modality == Modality.ABSTRACT
|
fun ClassDescriptor.isAbstract() = this.modality == Modality.SEALED || this.modality == Modality.ABSTRACT
|
||||||
|| this.kind == ClassKind.ENUM_CLASS
|
|| this.kind == ClassKind.ENUM_CLASS
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user