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.llvm.functionName
|
||||
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(
|
||||
val descriptor: SimpleFunctionDescriptor,
|
||||
@@ -91,7 +93,7 @@ internal class ClassVtablesBuilder(val classDescriptor: ClassDescriptor, val con
|
||||
context.getVtableBuilder(superClass).vtableEntries
|
||||
}
|
||||
|
||||
val methods = classDescriptor.sortedContributedMethods
|
||||
val methods = classDescriptor.sortedOverridableOrOverridingMethods
|
||||
val newVtableSlots = mutableListOf<OverriddenFunctionDescriptor>()
|
||||
|
||||
val inheritedVtableSlots = superVtableEntries.map { superMethod ->
|
||||
@@ -125,7 +127,7 @@ internal class ClassVtablesBuilder(val classDescriptor: ClassDescriptor, val con
|
||||
}
|
||||
|
||||
val methodTableEntries: List<OverriddenFunctionDescriptor> by lazy {
|
||||
classDescriptor.sortedContributedMethods
|
||||
classDescriptor.sortedOverridableOrOverridingMethods
|
||||
.flatMap { method -> method.allOverriddenDescriptors.map { OverriddenFunctionDescriptor(method, it) } }
|
||||
.filter { it.canBeCalledVirtually }
|
||||
.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
|
||||
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
|
||||
|| this.kind == ClassKind.ENUM_CLASS
|
||||
|
||||
|
||||
Reference in New Issue
Block a user