[KLIB] Fix K/N binary interface

- make it use return type for binary symbol name

(cherry picked from commit 4d93421688739732d75ce93f01fc3637f398752b)
This commit is contained in:
Roman Artemev
2020-03-06 18:30:28 +03:00
committed by Vasily Levchenko
parent 3c87a69597
commit b94a4f48e3
2 changed files with 11 additions and 10 deletions
@@ -15,7 +15,7 @@ import org.jetbrains.kotlin.backend.konan.descriptors.isAbstract
import org.jetbrains.kotlin.backend.konan.ir.allParameters
import org.jetbrains.kotlin.backend.konan.ir.isUnit
import org.jetbrains.kotlin.backend.konan.isExternalObjCClass
import org.jetbrains.kotlin.backend.konan.serialization.KonanManglerIr
import org.jetbrains.kotlin.backend.konan.serialization.AbstractKonanIrMangler
import org.jetbrains.kotlin.ir.declarations.*
import org.jetbrains.kotlin.ir.util.findAnnotation
import org.jetbrains.kotlin.ir.util.fqNameForIrSerialization
@@ -30,7 +30,8 @@ import org.jetbrains.kotlin.library.uniqueName
// TODO: do not serialize descriptors of non-exported declarations.
object KonanBinaryInterface {
private val mangler = KonanManglerIr
private val mangler = object : AbstractKonanIrMangler(true) {}
private val exportChecker = mangler.getExportChecker()
val IrFunction.functionName: String get() = mangler.run { signatureString }
@@ -13,10 +13,11 @@ import org.jetbrains.kotlin.ir.declarations.*
import org.jetbrains.kotlin.ir.types.getClass
import org.jetbrains.kotlin.ir.util.hasAnnotation
abstract class AbstractKonanIrMangler : IrBasedKotlinManglerImpl() {
abstract class AbstractKonanIrMangler(private val withReturnType: Boolean) : IrBasedKotlinManglerImpl() {
override fun getExportChecker(): IrExportCheckerVisitor = KonanIrExportChecker()
override fun getMangleComputer(mode: MangleMode): IrMangleComputer = KonanIrManglerComputer(StringBuilder(256), mode)
override fun getMangleComputer(mode: MangleMode): IrMangleComputer =
KonanIrManglerComputer(StringBuilder(256), mode, withReturnType)
private class KonanIrExportChecker : IrExportCheckerVisitor() {
override fun IrDeclaration.isPlatformSpecificExported(): Boolean {
@@ -41,11 +42,12 @@ abstract class AbstractKonanIrMangler : IrBasedKotlinManglerImpl() {
return false
}
}
private class KonanIrManglerComputer(builder: StringBuilder, mode: MangleMode) : IrMangleComputer(builder, mode) {
override fun copy(newMode: MangleMode): IrMangleComputer = KonanIrManglerComputer(builder, newMode)
private class KonanIrManglerComputer(builder: StringBuilder, mode: MangleMode, private val withReturnType: Boolean) : IrMangleComputer(builder, mode) {
override fun copy(newMode: MangleMode): IrMangleComputer = KonanIrManglerComputer(builder, newMode, withReturnType)
override fun addReturnType(): Boolean = withReturnType
override fun IrFunction.platformSpecificFunctionName(): String? {
(if (this is IrConstructor && this.isObjCConstructor) this.getObjCInitMethod() else this)?.getObjCMethodInfo()
@@ -76,12 +78,10 @@ abstract class AbstractKonanIrMangler : IrBasedKotlinManglerImpl() {
return if (this.hasObjCMethodAnnotation || this.hasObjCFactoryAnnotation || this.isObjCClassMethod()) "${param.name}:" else ""
}
}
}
object KonanManglerIr : AbstractKonanIrMangler()
object KonanManglerIr : AbstractKonanIrMangler(false)
abstract class AbstractKonanDescriptorMangler : DescriptorBasedKotlinManglerImpl() {
override fun getExportChecker(): DescriptorExportCheckerVisitor = KonanDescriptorExportChecker()