[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:
committed by
Vasily Levchenko
parent
3c87a69597
commit
b94a4f48e3
+3
-2
@@ -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 }
|
||||
|
||||
+8
-8
@@ -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()
|
||||
|
||||
Reference in New Issue
Block a user