From 3b8cb2a542666b3f39861c63d2624bb2cedb34c4 Mon Sep 17 00:00:00 2001 From: Igor Chevdar Date: Mon, 18 Jun 2018 16:04:44 +0300 Subject: [PATCH] Cached symbolName building --- .../backend/konan/descriptors/ClassVtablesBuilder.kt | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/descriptors/ClassVtablesBuilder.kt b/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/descriptors/ClassVtablesBuilder.kt index cfdb5a13642..9c710b8221b 100644 --- a/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/descriptors/ClassVtablesBuilder.kt +++ b/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/descriptors/ClassVtablesBuilder.kt @@ -162,7 +162,7 @@ internal class ClassVtablesBuilder(val classDescriptor: ClassDescriptor, val con filteredNewVtableSlots.forEach { println(" ${it.overriddenDescriptor.descriptor} -> ${it.descriptor.descriptor}") } } - inheritedVtableSlots + filteredNewVtableSlots.sortedBy { it.overriddenDescriptor.functionName.localHash.value } + inheritedVtableSlots + filteredNewVtableSlots.sortedBy { it.overriddenDescriptor.uniqueId } } fun vtableIndex(function: SimpleFunctionDescriptor): Int { @@ -176,8 +176,8 @@ internal class ClassVtablesBuilder(val classDescriptor: ClassDescriptor, val con classDescriptor.sortedOverridableOrOverridingMethods .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 } + .distinctBy { Triple(it.overriddenDescriptor.uniqueId, it.descriptor, it.needBridge) } + .sortedBy { it.overriddenDescriptor.uniqueId } // TODO: probably method table should contain all accessible methods to improve binary compatibility } @@ -186,6 +186,9 @@ internal class ClassVtablesBuilder(val classDescriptor: ClassDescriptor, val con this.simpleFunctions() .filter { (it.isOverridable || it.overriddenSymbols.isNotEmpty()) && it.bridgeTarget == null } - .sortedBy { it.functionName.localHash.value } + .sortedBy { it.uniqueId } + private val functionIds = mutableMapOf() + + private val FunctionDescriptor.uniqueId get() = functionIds.getOrPut(this) { functionName.localHash.value } } \ No newline at end of file