[IR] Rename PublicSignature -> CommonSignature

This commit is contained in:
Roman Artemev
2021-05-26 18:50:45 +03:00
committed by TeamCityServer
parent 5a284de2d4
commit 0856cd82d7
15 changed files with 50 additions and 46 deletions
@@ -76,14 +76,14 @@ class FirBasedSignatureComposer(private val mangler: FirMangler) : Fir2IrSignatu
is FirRegularClass -> { is FirRegularClass -> {
// TODO: private classes are probably not acceptable here too // TODO: private classes are probably not acceptable here too
val classId = declaration.classId val classId = declaration.classId
IdSignature.PublicSignature( IdSignature.CommonSignature(
classId.packageFqName.asString(), classId.relativeClassName.asString(), builder.hashId, builder.mask classId.packageFqName.asString(), classId.relativeClassName.asString(), builder.hashId, builder.mask
) )
} }
is FirTypeAlias -> { is FirTypeAlias -> {
if (declaration.visibility == Visibilities.Private) return null if (declaration.visibility == Visibilities.Private) return null
val classId = declaration.symbol.classId val classId = declaration.symbol.classId
IdSignature.PublicSignature( IdSignature.CommonSignature(
classId.packageFqName.asString(), classId.relativeClassName.asString(), builder.hashId, builder.mask classId.packageFqName.asString(), classId.relativeClassName.asString(), builder.hashId, builder.mask
) )
} }
@@ -95,7 +95,7 @@ class FirBasedSignatureComposer(private val mangler: FirMangler) : Fir2IrSignatu
val packageName = classId?.packageFqName ?: declaration.symbol.callableId.packageName val packageName = classId?.packageFqName ?: declaration.symbol.callableId.packageName
val callableName = declaration.symbol.callableId.callableName val callableName = declaration.symbol.callableId.callableName
IdSignature.PublicSignature( IdSignature.CommonSignature(
packageName.asString(), packageName.asString(),
classId?.relativeClassName?.child(callableName)?.asString() ?: callableName.asString(), classId?.relativeClassName?.child(callableName)?.asString() ?: callableName.asString(),
builder.hashId, builder.mask builder.hashId, builder.mask
@@ -110,12 +110,12 @@ class FirBasedSignatureComposer(private val mangler: FirMangler) : Fir2IrSignatu
isSetter: Boolean, isSetter: Boolean,
containingClass: ConeClassLikeLookupTag? containingClass: ConeClassLikeLookupTag?
): IdSignature? { ): IdSignature? {
val propertySignature = composeSignature(property, containingClass) as? IdSignature.PublicSignature ?: return null val propertySignature = composeSignature(property, containingClass) as? IdSignature.CommonSignature ?: return null
val accessorFqName = if (isSetter) { val accessorFqName = if (isSetter) {
propertySignature.declarationFqName + ".<set-${property.name.asString()}>" propertySignature.declarationFqName + ".<set-${property.name.asString()}>"
} else { } else {
propertySignature.declarationFqName + ".<get-${property.name.asString()}>" propertySignature.declarationFqName + ".<get-${property.name.asString()}>"
} }
return IdSignature.PublicSignature(propertySignature.packageFqName, accessorFqName, propertySignature.id, propertySignature.mask) return IdSignature.CommonSignature(propertySignature.packageFqName, accessorFqName, propertySignature.id, propertySignature.mask)
} }
} }
@@ -144,7 +144,7 @@ private class FileClassLowering(val context: JvmBackendContext) : FileLoweringPa
} }
private companion object { private companion object {
private val JVM_NAME = IdSignature.PublicSignature("kotlin.jvm", "JvmName", null, 0) private val JVM_NAME = IdSignature.CommonSignature("kotlin.jvm", "JvmName", null, 0)
} }
} }
@@ -137,7 +137,7 @@ private class SuspendLambdaLowering(context: JvmBackendContext) : SuspendLowerin
val function = reference.symbol.owner val function = reference.symbol.owner
val isRestricted = reference.symbol.owner.extensionReceiverParameter?.type?.classOrNull?.owner?.annotations?.any { val isRestricted = reference.symbol.owner.extensionReceiverParameter?.type?.classOrNull?.owner?.annotations?.any {
it.type.classOrNull?.signature == IdSignature.PublicSignature("kotlin.coroutines", "RestrictsSuspension", null, 0) it.type.classOrNull?.signature == IdSignature.CommonSignature("kotlin.coroutines", "RestrictsSuspension", null, 0)
} == true } == true
val suspendLambda = val suspendLambda =
if (isRestricted) context.ir.symbols.restrictedSuspendLambdaClass.owner if (isRestricted) context.ir.symbols.restrictedSuspendLambdaClass.owner
@@ -43,16 +43,16 @@ object IdSignatureValues {
@JvmField val iterable = getPublicSignature(StandardNames.COLLECTIONS_PACKAGE_FQ_NAME, "Iterable") @JvmField val iterable = getPublicSignature(StandardNames.COLLECTIONS_PACKAGE_FQ_NAME, "Iterable")
@JvmField val continuation = getPublicSignature(StandardNames.COROUTINES_PACKAGE_FQ_NAME_RELEASE, "Continuation") @JvmField val continuation = getPublicSignature(StandardNames.COROUTINES_PACKAGE_FQ_NAME_RELEASE, "Continuation")
@JvmField val result = getPublicSignature(StandardNames.BUILT_INS_PACKAGE_FQ_NAME, "Result") @JvmField val result = getPublicSignature(StandardNames.BUILT_INS_PACKAGE_FQ_NAME, "Result")
@JvmField val sequence = IdSignature.PublicSignature("kotlin.sequences", "Sequence", null, 0) @JvmField val sequence = IdSignature.CommonSignature("kotlin.sequences", "Sequence", null, 0)
} }
private fun IrType.isNotNullClassType(signature: IdSignature.PublicSignature) = isClassType(signature, hasQuestionMark = false) private fun IrType.isNotNullClassType(signature: IdSignature.CommonSignature) = isClassType(signature, hasQuestionMark = false)
private fun IrType.isNullableClassType(signature: IdSignature.PublicSignature) = isClassType(signature, hasQuestionMark = true) private fun IrType.isNullableClassType(signature: IdSignature.CommonSignature) = isClassType(signature, hasQuestionMark = true)
fun getPublicSignature(packageFqName: FqName, name: String) = fun getPublicSignature(packageFqName: FqName, name: String) =
IdSignature.PublicSignature(packageFqName.asString(), name, null, 0) IdSignature.CommonSignature(packageFqName.asString(), name, null, 0)
private fun IrType.isClassType(signature: IdSignature.PublicSignature, hasQuestionMark: Boolean? = null): Boolean { private fun IrType.isClassType(signature: IdSignature.CommonSignature, hasQuestionMark: Boolean? = null): Boolean {
if (this !is IrSimpleType) return false if (this !is IrSimpleType) return false
if (hasQuestionMark != null && this.hasQuestionMark != hasQuestionMark) return false if (hasQuestionMark != null && this.hasQuestionMark != hasQuestionMark) return false
return signature == classifier.signature return signature == classifier.signature
@@ -66,12 +66,12 @@ private fun classFqNameEquals(symbol: IrClassSymbol, fqName: FqNameUnsafe): Bool
return classFqNameEquals(symbol.owner, fqName) return classFqNameEquals(symbol.owner, fqName)
} }
private val idSignatureToPrimitiveType: Map<IdSignature.PublicSignature, PrimitiveType> = private val idSignatureToPrimitiveType: Map<IdSignature.CommonSignature, PrimitiveType> =
PrimitiveType.values().associateBy { PrimitiveType.values().associateBy {
getPublicSignature(StandardNames.BUILT_INS_PACKAGE_FQ_NAME, it.typeName.asString()) getPublicSignature(StandardNames.BUILT_INS_PACKAGE_FQ_NAME, it.typeName.asString())
} }
val primitiveArrayTypesSignatures: Map<PrimitiveType, IdSignature.PublicSignature> = val primitiveArrayTypesSignatures: Map<PrimitiveType, IdSignature.CommonSignature> =
PrimitiveType.values().associateWith { PrimitiveType.values().associateWith {
getPublicSignature(StandardNames.BUILT_INS_PACKAGE_FQ_NAME, "${it.typeName.asString()}Array") getPublicSignature(StandardNames.BUILT_INS_PACKAGE_FQ_NAME, "${it.typeName.asString()}Array")
} }
@@ -337,7 +337,7 @@ abstract class DeclarationStubGenerator(
private fun findDescriptorBySignature(signature: IdSignature): DeclarationDescriptor? = when (signature) { private fun findDescriptorBySignature(signature: IdSignature): DeclarationDescriptor? = when (signature) {
is IdSignature.AccessorSignature -> findDescriptorForAccessorSignature(signature) is IdSignature.AccessorSignature -> findDescriptorForAccessorSignature(signature)
is IdSignature.PublicSignature -> findDescriptorForPublicSignature(signature) is IdSignature.CommonSignature -> findDescriptorForPublicSignature(signature)
else -> error("only PublicSignature or AccessorSignature should reach this point, got $signature") else -> error("only PublicSignature or AccessorSignature should reach this point, got $signature")
} }
@@ -347,7 +347,7 @@ abstract class DeclarationStubGenerator(
return propertyDescriptor.accessors.singleOrNull { it.name.asString() == shortName } return propertyDescriptor.accessors.singleOrNull { it.name.asString() == shortName }
} }
private fun findDescriptorForPublicSignature(signature: IdSignature.PublicSignature): DeclarationDescriptor? { private fun findDescriptorForPublicSignature(signature: IdSignature.CommonSignature): DeclarationDescriptor? {
val packageDescriptor = moduleDescriptor.getPackage(signature.packageFqName()) val packageDescriptor = moduleDescriptor.getPackage(signature.packageFqName())
val nameSegments = signature.nameSegments val nameSegments = signature.nameSegments
val toplevelDescriptors = packageDescriptor.memberScope.getDescriptorsFiltered { name -> name.asString() == nameSegments.first() } val toplevelDescriptors = packageDescriptor.memberScope.getDescriptorsFiltered { name -> name.asString() == nameSegments.first() }
@@ -30,7 +30,7 @@ sealed class IdSignature {
abstract fun packageFqName(): FqName abstract fun packageFqName(): FqName
open fun asPublic(): PublicSignature? = null open fun asPublic(): CommonSignature? = null
abstract fun render(): String abstract fun render(): String
@@ -45,7 +45,7 @@ sealed class IdSignature {
override fun toString(): String = override fun toString(): String =
"${if (isPublic) "public" else "private"} ${render()}" "${if (isPublic) "public" else "private"} ${render()}"
class PublicSignature(val packageFqName: String, val declarationFqName: String, val id: Long?, val mask: Long) : IdSignature() { class CommonSignature(val packageFqName: String, val declarationFqName: String, val id: Long?, val mask: Long) : IdSignature() {
override val isPublic: Boolean get() = true override val isPublic: Boolean get() = true
override fun packageFqName(): FqName = FqName(packageFqName) override fun packageFqName(): FqName = FqName(packageFqName)
@@ -72,21 +72,21 @@ sealed class IdSignature {
val nameSegments = nameSegments val nameSegments = nameSegments
if (nameSegments.size == 1) return this if (nameSegments.size == 1) return this
return PublicSignature(packageFqName, nameSegments.first(), null, adaptMask(mask)) return CommonSignature(packageFqName, nameSegments.first(), null, adoptedMask)
} }
override fun isPackageSignature(): Boolean = id == null && declarationFqName.isEmpty() override fun isPackageSignature(): Boolean = id == null && declarationFqName.isEmpty()
override fun nearestPublicSig(): PublicSignature = this override fun nearestPublicSig(): CommonSignature = this
override fun flags(): Long = mask override fun flags(): Long = mask
override fun render(): String = "$packageFqName/$declarationFqName|$id[${mask.toString(2)}]" override fun render(): String = "$packageFqName/$declarationFqName|$id[${mask.toString(2)}]"
override fun asPublic(): PublicSignature? = this override fun asPublic(): CommonSignature = this
override fun equals(other: Any?): Boolean = override fun equals(other: Any?): Boolean =
other is PublicSignature && packageFqName == other.packageFqName && declarationFqName == other.declarationFqName && other is CommonSignature && packageFqName == other.packageFqName && declarationFqName == other.declarationFqName &&
id == other.id && mask == other.mask id == other.id && mask == other.mask
override fun hashCode(): Int = override fun hashCode(): Int =
@@ -106,7 +106,7 @@ sealed class IdSignature {
override fun flags(): Long = accessorSignature.mask override fun flags(): Long = accessorSignature.mask
override fun asPublic(): PublicSignature? = accessorSignature override fun asPublic(): CommonSignature = accessorSignature
override fun equals(other: Any?): Boolean = override fun equals(other: Any?): Boolean =
if (other is AccessorSignature) accessorSignature == other.accessorSignature if (other is AccessorSignature) accessorSignature == other.accessorSignature
@@ -136,14 +136,14 @@ sealed class IdSignature {
val memberSignature: IdSignature, val memberSignature: IdSignature,
val overriddenSignatures: List<IdSignature> val overriddenSignatures: List<IdSignature>
) : IdSignature() { ) : IdSignature() {
override val isPublic: Boolean override val isPubliclyVisible: Boolean
get() = memberSignature.isPublic get() = memberSignature.isPubliclyVisible
override fun topLevelSignature(): IdSignature = override fun topLevelSignature(): IdSignature =
memberSignature.topLevelSignature() memberSignature.topLevelSignature()
override fun nearestPublicSig(): IdSignature = override fun nearestPublicSig(): IdSignature =
if (memberSignature.isPublic) if (memberSignature.isPubliclyVisible)
this this
else else
memberSignature.nearestPublicSig() memberSignature.nearestPublicSig()
@@ -173,15 +173,15 @@ sealed class IdSignature {
} }
} }
class FileLocalSignature(val container: IdSignature, val id: Long) : IdSignature() { class FileLocalSignature(val container: IdSignature, val id: Long, val description: String? = null) : IdSignature() {
override val isPublic: Boolean get() = false override val isPubliclyVisible: Boolean get() = false
override fun packageFqName(): FqName = container.packageFqName() override fun packageFqName(): FqName = container.packageFqName()
override fun topLevelSignature(): IdSignature { override fun topLevelSignature(): IdSignature {
val topLevelContainer = container.topLevelSignature() val topLevelContainer = container.topLevelSignature()
if (topLevelContainer === container) { if (topLevelContainer === container) {
if (topLevelContainer is PublicSignature && topLevelContainer.declarationFqName.isEmpty()) { if (topLevelContainer is CommonSignature && topLevelContainer.declarationFqName.isEmpty()) {
// private top level // private top level
return this return this
} }
@@ -310,4 +310,8 @@ sealed class IdSignature {
interface IdSignatureComposer { interface IdSignatureComposer {
fun composeSignature(descriptor: DeclarationDescriptor): IdSignature? fun composeSignature(descriptor: DeclarationDescriptor): IdSignature?
fun composeEnumEntrySignature(descriptor: ClassDescriptor): IdSignature? fun composeEnumEntrySignature(descriptor: ClassDescriptor): IdSignature?
fun composeFieldSignature(descriptor: PropertyDescriptor): IdSignature?
fun composeAnonInitSignature(descriptor: ClassDescriptor): IdSignature?
fun inFile(file: IrFileSymbol?, block: () -> Unit)
} }
@@ -42,7 +42,7 @@ class DescriptorByIdSignatureFinder(
fun findDescriptorBySignature(signature: IdSignature): DeclarationDescriptor? = fun findDescriptorBySignature(signature: IdSignature): DeclarationDescriptor? =
when (signature) { when (signature) {
is IdSignature.AccessorSignature -> findDescriptorForAccessorSignature(signature) is IdSignature.AccessorSignature -> findDescriptorForAccessorSignature(signature)
is IdSignature.PublicSignature -> findDescriptorForPublicSignature(signature) is IdSignature.CommonSignature -> findDescriptorForPublicSignature(signature)
else -> error("only PublicSignature or AccessorSignature should reach this point, got $signature") else -> error("only PublicSignature or AccessorSignature should reach this point, got $signature")
} }
@@ -89,7 +89,7 @@ class DescriptorByIdSignatureFinder(
} }
} }
private fun findDescriptorForPublicSignature(signature: IdSignature.PublicSignature): DeclarationDescriptor? { private fun findDescriptorForPublicSignature(signature: IdSignature.CommonSignature): DeclarationDescriptor? {
val nameSegments = signature.nameSegments val nameSegments = signature.nameSegments
val toplevelDescriptors = performLookup(nameSegments, signature.packageFqName()) val toplevelDescriptors = performLookup(nameSegments, signature.packageFqName())
.ifEmpty { return null } .ifEmpty { return null }
@@ -199,7 +199,7 @@ open class IrFileSerializer(
/* ------- IdSignature ------------------------------------------------------ */ /* ------- IdSignature ------------------------------------------------------ */
private fun serializePublicSignature(signature: IdSignature.PublicSignature): ProtoPublicIdSignature { private fun serializePublicSignature(signature: IdSignature.CommonSignature): ProtoPublicIdSignature {
val proto = ProtoPublicIdSignature.newBuilder() val proto = ProtoPublicIdSignature.newBuilder()
proto.addAllPackageFqName(serializeFqName(signature.packageFqName)) proto.addAllPackageFqName(serializeFqName(signature.packageFqName))
proto.addAllDeclarationFqName(serializeFqName(signature.declarationFqName)) proto.addAllDeclarationFqName(serializeFqName(signature.declarationFqName))
@@ -274,7 +274,7 @@ open class IrFileSerializer(
fun serializeIdSignature(idSignature: IdSignature): ProtoIdSignature { fun serializeIdSignature(idSignature: IdSignature): ProtoIdSignature {
val proto = ProtoIdSignature.newBuilder() val proto = ProtoIdSignature.newBuilder()
when (idSignature) { when (idSignature) {
is IdSignature.PublicSignature -> proto.publicSig = serializePublicSignature(idSignature) is IdSignature.CommonSignature -> proto.publicSig = serializePublicSignature(idSignature)
is IdSignature.AccessorSignature -> proto.accessorSig = serializeAccessorSignature(idSignature) is IdSignature.AccessorSignature -> proto.accessorSig = serializeAccessorSignature(idSignature)
is IdSignature.FileLocalSignature -> proto.privateSig = serializePrivateSignature(idSignature) is IdSignature.FileLocalSignature -> proto.privateSig = serializePrivateSignature(idSignature)
is IdSignature.ScopeLocalDeclaration -> proto.scopedLocalSig = serializeScopeLocalSignature(idSignature) is IdSignature.ScopeLocalDeclaration -> proto.scopedLocalSig = serializeScopeLocalSignature(idSignature)
@@ -128,7 +128,7 @@ class IrModuleDeserializerWithBuiltIns(
val className = fqnParts.firstOrNull() ?: error("Expected class name for $idSig") val className = fqnParts.firstOrNull() ?: error("Expected class name for $idSig")
val functionDescriptor = computeFunctionDescriptor(className) val functionDescriptor = computeFunctionDescriptor(className)
val topLevelSignature = IdSignature.PublicSignature(publicSig.packageFqName, className, null, publicSig.mask) val topLevelSignature = IdSignature.CommonSignature(publicSig.packageFqName, className, null, publicSig.mask)
val functionClass = when (functionDescriptor.functionKind) { val functionClass = when (functionDescriptor.functionKind) {
FunctionClassKind.KSuspendFunction -> functionFactory.kSuspendFunctionN(functionDescriptor.arity) { callback -> FunctionClassKind.KSuspendFunction -> functionFactory.kSuspendFunctionN(functionDescriptor.arity) { callback ->
@@ -129,18 +129,18 @@ class IrSymbolDeserializer(
val cls = fileReader.deserializeFqName(proto.declarationFqNameList) val cls = fileReader.deserializeFqName(proto.declarationFqNameList)
val memberId = if (proto.hasMemberUniqId()) proto.memberUniqId else null val memberId = if (proto.hasMemberUniqId()) proto.memberUniqId else null
return IdSignature.PublicSignature(pkg, cls, memberId, proto.flags) return IdSignature.CommonSignature(pkg, cls, memberId, proto.flags)
} }
private fun deserializeAccessorIdSignature(proto: ProtoAccessorIdSignature): IdSignature.AccessorSignature { private fun deserializeAccessorIdSignature(proto: ProtoAccessorIdSignature): IdSignature.AccessorSignature {
val propertySignature = deserializeIdSignature(proto.propertySignature) val propertySignature = deserializeIdSignature(proto.propertySignature)
require(propertySignature is IdSignature.PublicSignature) { "For public accessor corresponding property supposed to be public as well" } require(propertySignature is IdSignature.CommonSignature) { "For public accessor corresponding property supposed to be public as well" }
val name = fileReader.deserializeString(proto.name) val name = fileReader.deserializeString(proto.name)
val hash = proto.accessorHashId val hash = proto.accessorHashId
val mask = proto.flags val mask = proto.flags
val accessorSignature = val accessorSignature =
IdSignature.PublicSignature(propertySignature.packageFqName, "${propertySignature.declarationFqName}.$name", hash, mask) IdSignature.CommonSignature(propertySignature.packageFqName, "${propertySignature.declarationFqName}.$name", hash, mask)
return IdSignature.AccessorSignature(propertySignature, accessorSignature) return IdSignature.AccessorSignature(propertySignature, accessorSignature)
} }
@@ -39,10 +39,10 @@ abstract class IdSignatureBuilder<D> {
return IdSignature.SpecialFakeOverrideSignature(memberSignature, overriddenSignatures) return IdSignature.SpecialFakeOverrideSignature(memberSignature, overriddenSignatures)
} }
hashIdAcc == null -> { hashIdAcc == null -> {
IdSignature.PublicSignature(packageFqName, classFqName, hashId, mask) IdSignature.CommonSignature(packageFqName, classFqName, hashId, mask)
} }
else -> { else -> {
val accessorSignature = IdSignature.PublicSignature(packageFqName, classFqName, hashIdAcc, mask) val accessorSignature = IdSignature.CommonSignature(packageFqName, classFqName, hashIdAcc, mask)
hashIdAcc = null hashIdAcc = null
classFqnSegments.run { removeAt(lastIndex) } classFqnSegments.run { removeAt(lastIndex) }
val propertySignature = build() val propertySignature = build()
@@ -42,7 +42,7 @@ private val objCConstructorFqName = FqName("kotlinx.cinterop.ObjCConstructor")
private val objCFactoryFqName = interopPackageName.child(Name.identifier("ObjCFactory")) private val objCFactoryFqName = interopPackageName.child(Name.identifier("ObjCFactory"))
private val objcnamesForwardDeclarationsPackageName = Name.identifier("objcnames") private val objcnamesForwardDeclarationsPackageName = Name.identifier("objcnames")
private fun getTopLevelPublicSignature(fqName: FqName): IdSignature.PublicSignature = private fun getTopLevelPublicSignature(fqName: FqName): IdSignature.CommonSignature =
getPublicSignature(fqName.parent(), fqName.shortName().asString()) getPublicSignature(fqName.parent(), fqName.shortName().asString())
fun ClassDescriptor.isObjCClass(): Boolean = fun ClassDescriptor.isObjCClass(): Boolean =
@@ -26,7 +26,6 @@ import org.jetbrains.kotlin.ir.expressions.IrExpression
import org.jetbrains.kotlin.ir.expressions.impl.IrConstImpl import org.jetbrains.kotlin.ir.expressions.impl.IrConstImpl
import org.jetbrains.kotlin.ir.expressions.impl.IrConstructorCallImpl import org.jetbrains.kotlin.ir.expressions.impl.IrConstructorCallImpl
import org.jetbrains.kotlin.ir.symbols.IrClassSymbol import org.jetbrains.kotlin.ir.symbols.IrClassSymbol
import org.jetbrains.kotlin.ir.symbols.isPublicApi
import org.jetbrains.kotlin.ir.types.IdSignatureValues import org.jetbrains.kotlin.ir.types.IdSignatureValues
import org.jetbrains.kotlin.ir.types.classifierOrFail import org.jetbrains.kotlin.ir.types.classifierOrFail
import org.jetbrains.kotlin.ir.types.isMarkedNullable import org.jetbrains.kotlin.ir.types.isMarkedNullable
@@ -36,8 +35,7 @@ import org.jetbrains.kotlin.name.FqName
import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.name.Name
import org.jetbrains.kotlin.utils.addToStdlib.safeAs import org.jetbrains.kotlin.utils.addToStdlib.safeAs
private fun IrClass.isClassTypeWithSignature(signature: IdSignature.PublicSignature): Boolean { private fun IrClass.isClassTypeWithSignature(signature: IdSignature.CommonSignature): Boolean {
if (!symbol.isPublicApi) return false
return signature == symbol.signature return signature == symbol.signature
} }
@@ -188,8 +188,10 @@ internal class RTTIGenerator(override val context: Context) : ContextUtils {
vector128Type to 10 vector128Type to 10
) )
private fun getElementType(irClass: IrClass): LLVMTypeRef? = private fun getElementType(irClass: IrClass): LLVMTypeRef? {
if (irClass.symbol.isPublicApi) arrayClasses[irClass.symbol.signature as IdSignature.PublicSignature] else null val signature = irClass.symbol.signature as? IdSignature.CommonSignature?
return signature?.let { arrayClasses[it] }
}
private fun getInstanceSize(classType: LLVMTypeRef?, irClass: IrClass) : Int { private fun getInstanceSize(classType: LLVMTypeRef?, irClass: IrClass) : Int {
val elementType = getElementType(irClass) val elementType = getElementType(irClass)
@@ -190,7 +190,7 @@ internal class KonanIrLinker(
override fun contains(idSig: IdSignature): Boolean = idSig.isForwardDeclarationSignature() override fun contains(idSig: IdSignature): Boolean = idSig.isForwardDeclarationSignature()
private fun resolveDescriptor(idSig: IdSignature): ClassDescriptor = private fun resolveDescriptor(idSig: IdSignature): ClassDescriptor =
with(idSig as IdSignature.PublicSignature) { with(idSig as IdSignature.CommonSignature) {
val classId = ClassId(packageFqName(), FqName(declarationFqName), false) val classId = ClassId(packageFqName(), FqName(declarationFqName), false)
moduleDescriptor.findClassAcrossModuleDependencies(classId) ?: error("No declaration found with $idSig") moduleDescriptor.findClassAcrossModuleDependencies(classId) ?: error("No declaration found with $idSig")
} }