IR: make IrSymbol.isPublicApi an extension

This commit is contained in:
Alexander Udalov
2020-10-20 20:27:21 +02:00
parent 4bd08e5e0c
commit 08b8939b80
9 changed files with 24 additions and 23 deletions
@@ -7,8 +7,8 @@ package org.jetbrains.kotlin.backend.common.lower
import org.jetbrains.kotlin.backend.common.* import org.jetbrains.kotlin.backend.common.*
import org.jetbrains.kotlin.backend.common.ir.* import org.jetbrains.kotlin.backend.common.ir.*
import org.jetbrains.kotlin.descriptors.Modality
import org.jetbrains.kotlin.descriptors.DescriptorVisibilities import org.jetbrains.kotlin.descriptors.DescriptorVisibilities
import org.jetbrains.kotlin.descriptors.Modality
import org.jetbrains.kotlin.ir.IrElement import org.jetbrains.kotlin.ir.IrElement
import org.jetbrains.kotlin.ir.builders.* import org.jetbrains.kotlin.ir.builders.*
import org.jetbrains.kotlin.ir.builders.declarations.buildClass import org.jetbrains.kotlin.ir.builders.declarations.buildClass
@@ -78,7 +78,7 @@ abstract class AbstractSuspendFunctionsLowering<C : CommonBackendContext>(val co
// Suppress since it is used in native // Suppress since it is used in native
@Suppress("MemberVisibilityCanBePrivate") @Suppress("MemberVisibilityCanBePrivate")
protected fun IrCall.isReturnIfSuspendedCall() = protected fun IrCall.isReturnIfSuspendedCall() =
symbol.isPublicApi && context.ir.symbols.returnIfSuspended.signature == symbol.signature symbol.signature == context.ir.symbols.returnIfSuspended.signature
private fun tryTransformSuspendFunction(element: IrElement) = private fun tryTransformSuspendFunction(element: IrElement) =
@@ -323,8 +323,8 @@ class IrInterpreter(private val irBuiltIns: IrBuiltIns, private val bodyMap: Map
} }
private fun IrFunction.trySubstituteFunctionBody(): ExecutionResult? { private fun IrFunction.trySubstituteFunctionBody(): ExecutionResult? {
if (!this.symbol.isPublicApi) return null val signature = this.symbol.signature ?: return null
val body = bodyMap[this.symbol.signature] val body = bodyMap[signature]
return body?.let { return body?.let {
try { try {
@@ -33,11 +33,11 @@ interface IrSymbol {
val isBound: Boolean val isBound: Boolean
val signature: IdSignature? val signature: IdSignature?
val isPublicApi: Boolean
get() = signature != null
} }
val IrSymbol.isPublicApi: Boolean
get() = signature != null
interface IrBindableSymbol<out D : DeclarationDescriptor, B : IrSymbolOwner> : IrSymbol { interface IrBindableSymbol<out D : DeclarationDescriptor, B : IrSymbolOwner> : IrSymbol {
override val owner: B override val owner: B
@@ -19,9 +19,6 @@ class DescriptorlessExternalPackageFragmentSymbol : IrExternalPackageFragmentSym
private var _owner: IrExternalPackageFragment? = null private var _owner: IrExternalPackageFragment? = null
override val owner get() = _owner!! override val owner get() = _owner!!
override val isPublicApi: Boolean
get() = TODO("Not yet implemented")
override val signature: IdSignature? override val signature: IdSignature?
get() = TODO("Not yet implemented") get() = TODO("Not yet implemented")
@@ -98,8 +98,8 @@ fun IrType.isCollection(): Boolean = isNotNullClassType(IdSignatureValues.collec
fun IrType.isNothing(): Boolean = isNotNullClassType(IdSignatureValues.nothing) fun IrType.isNothing(): Boolean = isNotNullClassType(IdSignatureValues.nothing)
fun IrType.isPrimitiveType(hasQuestionMark: Boolean = false): Boolean = fun IrType.isPrimitiveType(hasQuestionMark: Boolean = false): Boolean =
(this is IrSimpleType && hasQuestionMark == this.hasQuestionMark) && (this is IrSimpleType && hasQuestionMark == this.hasQuestionMark) &&
classOrNull?.takeIf(IrClassSymbol::isPublicApi)?.signature in idSignatureToPrimitiveType classOrNull?.signature in idSignatureToPrimitiveType
fun IrType.isNullablePrimitiveType(): Boolean = isPrimitiveType(true) fun IrType.isNullablePrimitiveType(): Boolean = isPrimitiveType(true)
@@ -1112,8 +1112,8 @@ fun SymbolTable.noUnboundLeft(message: String) {
val unbound = this.allUnbound val unbound = this.allUnbound
assert(unbound.isEmpty()) { assert(unbound.isEmpty()) {
"$message\n" + "$message\n" +
unbound.map { unbound.joinToString("\n") {
"$it ${if (it.isPublicApi) it.signature.toString() else "NON-PUBLIC API $it"}" "$it ${it.signature?.toString() ?: "NON-PUBLIC API $it"}"
}.joinToString("\n") }
} }
} }
@@ -29,13 +29,16 @@ import org.jetbrains.kotlin.ir.symbols.IrPropertySymbol
import org.jetbrains.kotlin.ir.symbols.IrSimpleFunctionSymbol import org.jetbrains.kotlin.ir.symbols.IrSimpleFunctionSymbol
import org.jetbrains.kotlin.ir.symbols.impl.IrPropertySymbolImpl import org.jetbrains.kotlin.ir.symbols.impl.IrPropertySymbolImpl
import org.jetbrains.kotlin.ir.types.getClass import org.jetbrains.kotlin.ir.types.getClass
import org.jetbrains.kotlin.ir.util.* import org.jetbrains.kotlin.ir.util.IdSignature
import org.jetbrains.kotlin.ir.util.SymbolTable
class FakeOverrideGlobalDeclarationTable(signatureSerializer: IdSignatureSerializer) import org.jetbrains.kotlin.ir.util.parentAsClass
: GlobalDeclarationTable(signatureSerializer, signatureSerializer.mangler) {
class FakeOverrideGlobalDeclarationTable(
signatureSerializer: IdSignatureSerializer
) : GlobalDeclarationTable(signatureSerializer, signatureSerializer.mangler) {
fun clear() = table.clear() fun clear() = table.clear()
} }
class FakeOverrideDeclarationTable( class FakeOverrideDeclarationTable(
signatureSerializer: IdSignatureSerializer, signatureSerializer: IdSignatureSerializer,
globalTable: FakeOverrideGlobalDeclarationTable = FakeOverrideGlobalDeclarationTable(signatureSerializer) globalTable: FakeOverrideGlobalDeclarationTable = FakeOverrideGlobalDeclarationTable(signatureSerializer)
@@ -61,15 +61,15 @@ import org.jetbrains.kotlin.backend.common.serialization.proto.IrDynamicOperator
import org.jetbrains.kotlin.backend.common.serialization.proto.IrDynamicType as ProtoDynamicType import org.jetbrains.kotlin.backend.common.serialization.proto.IrDynamicType as ProtoDynamicType
import org.jetbrains.kotlin.backend.common.serialization.proto.IrEnumConstructorCall as ProtoEnumConstructorCall import org.jetbrains.kotlin.backend.common.serialization.proto.IrEnumConstructorCall as ProtoEnumConstructorCall
import org.jetbrains.kotlin.backend.common.serialization.proto.IrEnumEntry as ProtoEnumEntry import org.jetbrains.kotlin.backend.common.serialization.proto.IrEnumEntry as ProtoEnumEntry
import org.jetbrains.kotlin.backend.common.serialization.proto.IrErrorCallExpression as ProtoErrorCallExpression
import org.jetbrains.kotlin.backend.common.serialization.proto.IrErrorDeclaration as ProtoErrorDeclaration
import org.jetbrains.kotlin.backend.common.serialization.proto.IrErrorExpression as ProtoErrorExpression
import org.jetbrains.kotlin.backend.common.serialization.proto.IrErrorType as ProtoErrorType import org.jetbrains.kotlin.backend.common.serialization.proto.IrErrorType as ProtoErrorType
import org.jetbrains.kotlin.backend.common.serialization.proto.IrExpression as ProtoExpression import org.jetbrains.kotlin.backend.common.serialization.proto.IrExpression as ProtoExpression
import org.jetbrains.kotlin.backend.common.serialization.proto.IrField as ProtoField import org.jetbrains.kotlin.backend.common.serialization.proto.IrField as ProtoField
import org.jetbrains.kotlin.backend.common.serialization.proto.IrFunction as ProtoFunction import org.jetbrains.kotlin.backend.common.serialization.proto.IrFunction as ProtoFunction
import org.jetbrains.kotlin.backend.common.serialization.proto.IrFunctionBase as ProtoFunctionBase import org.jetbrains.kotlin.backend.common.serialization.proto.IrFunctionBase as ProtoFunctionBase
import org.jetbrains.kotlin.backend.common.serialization.proto.IrFunctionExpression as ProtoFunctionExpression import org.jetbrains.kotlin.backend.common.serialization.proto.IrFunctionExpression as ProtoFunctionExpression
import org.jetbrains.kotlin.backend.common.serialization.proto.IrErrorExpression as ProtoErrorExpression
import org.jetbrains.kotlin.backend.common.serialization.proto.IrErrorCallExpression as ProtoErrorCallExpression
import org.jetbrains.kotlin.backend.common.serialization.proto.IrErrorDeclaration as ProtoErrorDeclaration
import org.jetbrains.kotlin.backend.common.serialization.proto.IrFunctionReference as ProtoFunctionReference import org.jetbrains.kotlin.backend.common.serialization.proto.IrFunctionReference as ProtoFunctionReference
import org.jetbrains.kotlin.backend.common.serialization.proto.IrGetClass as ProtoGetClass import org.jetbrains.kotlin.backend.common.serialization.proto.IrGetClass as ProtoGetClass
import org.jetbrains.kotlin.backend.common.serialization.proto.IrGetEnumValue as ProtoGetEnumValue import org.jetbrains.kotlin.backend.common.serialization.proto.IrGetEnumValue as ProtoGetEnumValue
@@ -22,6 +22,7 @@ import org.jetbrains.kotlin.ir.descriptors.IrAbstractFunctionFactory
import org.jetbrains.kotlin.ir.descriptors.IrBuiltIns import org.jetbrains.kotlin.ir.descriptors.IrBuiltIns
import org.jetbrains.kotlin.ir.symbols.IrFieldSymbol import org.jetbrains.kotlin.ir.symbols.IrFieldSymbol
import org.jetbrains.kotlin.ir.symbols.IrSymbol import org.jetbrains.kotlin.ir.symbols.IrSymbol
import org.jetbrains.kotlin.ir.symbols.isPublicApi
import org.jetbrains.kotlin.ir.util.DeclarationStubGenerator import org.jetbrains.kotlin.ir.util.DeclarationStubGenerator
import org.jetbrains.kotlin.ir.util.IdSignature import org.jetbrains.kotlin.ir.util.IdSignature
import org.jetbrains.kotlin.ir.util.SymbolTable import org.jetbrains.kotlin.ir.util.SymbolTable