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:
Svyatoslav Scherbina
2018-03-21 13:51:11 +03:00
committed by SvyatoslavScherbina
parent bcb706c8ff
commit a37657127a
2 changed files with 10 additions and 10 deletions
@@ -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 }
@@ -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