Swapped order of operations in method table building (was a bug)

This commit is contained in:
Igor Chevdar
2017-02-22 15:18:39 +03:00
parent 9165d65560
commit ee484a40ff
@@ -93,21 +93,14 @@ internal class ClassVtablesBuilder(val classDescriptor: ClassDescriptor, val con
return index
}
private val ClassDescriptor.contributedMethodsWithOverridden: List<OverriddenFunctionDescriptor>
get() {
return contributedMethods.flatMap { method ->
method.allOverriddenDescriptors.map { OverriddenFunctionDescriptor(method, it) }
}.distinctBy {
Triple(it.overriddenDescriptor.functionName, it.descriptor, it.needBridge)
}.sortedBy {
it.overriddenDescriptor.functionName.localHash.value
}
}
val methodTableEntries: List<OverriddenFunctionDescriptor> by lazy {
assert(!classDescriptor.isAbstract())
classDescriptor.contributedMethodsWithOverridden.filter { it.canBeCalledVirtually }
classDescriptor.contributedMethods
.flatMap { method -> method.allOverriddenDescriptors.map { OverriddenFunctionDescriptor(method, it) } }
.filter { it.canBeCalledVirtually }
.distinctBy { Triple(it.overriddenDescriptor.functionName, it.descriptor, it.needBridge) }
.sortedBy { it.overriddenDescriptor.functionName.localHash.value }
// TODO: probably method table should contain all accessible methods to improve binary compatibility
}