[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.allParameters
|
||||||
import org.jetbrains.kotlin.backend.konan.ir.isUnit
|
import org.jetbrains.kotlin.backend.konan.ir.isUnit
|
||||||
import org.jetbrains.kotlin.backend.konan.isExternalObjCClass
|
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.declarations.*
|
||||||
import org.jetbrains.kotlin.ir.util.findAnnotation
|
import org.jetbrains.kotlin.ir.util.findAnnotation
|
||||||
import org.jetbrains.kotlin.ir.util.fqNameForIrSerialization
|
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.
|
// TODO: do not serialize descriptors of non-exported declarations.
|
||||||
|
|
||||||
object KonanBinaryInterface {
|
object KonanBinaryInterface {
|
||||||
private val mangler = KonanManglerIr
|
private val mangler = object : AbstractKonanIrMangler(true) {}
|
||||||
|
|
||||||
private val exportChecker = mangler.getExportChecker()
|
private val exportChecker = mangler.getExportChecker()
|
||||||
|
|
||||||
val IrFunction.functionName: String get() = mangler.run { signatureString }
|
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.types.getClass
|
||||||
import org.jetbrains.kotlin.ir.util.hasAnnotation
|
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 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() {
|
private class KonanIrExportChecker : IrExportCheckerVisitor() {
|
||||||
override fun IrDeclaration.isPlatformSpecificExported(): Boolean {
|
override fun IrDeclaration.isPlatformSpecificExported(): Boolean {
|
||||||
@@ -41,11 +42,12 @@ abstract class AbstractKonanIrMangler : IrBasedKotlinManglerImpl() {
|
|||||||
|
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private class KonanIrManglerComputer(builder: StringBuilder, mode: MangleMode) : IrMangleComputer(builder, mode) {
|
private class KonanIrManglerComputer(builder: StringBuilder, mode: MangleMode, private val withReturnType: Boolean) : IrMangleComputer(builder, mode) {
|
||||||
override fun copy(newMode: MangleMode): IrMangleComputer = KonanIrManglerComputer(builder, newMode)
|
override fun copy(newMode: MangleMode): IrMangleComputer = KonanIrManglerComputer(builder, newMode, withReturnType)
|
||||||
|
|
||||||
|
override fun addReturnType(): Boolean = withReturnType
|
||||||
|
|
||||||
override fun IrFunction.platformSpecificFunctionName(): String? {
|
override fun IrFunction.platformSpecificFunctionName(): String? {
|
||||||
(if (this is IrConstructor && this.isObjCConstructor) this.getObjCInitMethod() else this)?.getObjCMethodInfo()
|
(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 ""
|
return if (this.hasObjCMethodAnnotation || this.hasObjCFactoryAnnotation || this.isObjCClassMethod()) "${param.name}:" else ""
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
object KonanManglerIr : AbstractKonanIrMangler()
|
object KonanManglerIr : AbstractKonanIrMangler(false)
|
||||||
|
|
||||||
abstract class AbstractKonanDescriptorMangler : DescriptorBasedKotlinManglerImpl() {
|
abstract class AbstractKonanDescriptorMangler : DescriptorBasedKotlinManglerImpl() {
|
||||||
override fun getExportChecker(): DescriptorExportCheckerVisitor = KonanDescriptorExportChecker()
|
override fun getExportChecker(): DescriptorExportCheckerVisitor = KonanDescriptorExportChecker()
|
||||||
|
|||||||
Reference in New Issue
Block a user