[FIR2IR] Create builtin IR class for @IntrinsicConstEvaluation manually if it is missing in stdlib

^KT-59151
This commit is contained in:
Dmitriy Novozhilov
2023-08-18 16:00:00 +03:00
committed by Space Team
parent 3f2e996803
commit 250b94d5dd
4 changed files with 55 additions and 45 deletions
@@ -19,8 +19,6 @@ import org.jetbrains.kotlin.ir.BuiltInOperatorNames
import org.jetbrains.kotlin.ir.IrBuiltIns
import org.jetbrains.kotlin.ir.ObsoleteDescriptorBasedAPI
import org.jetbrains.kotlin.ir.UNDEFINED_OFFSET
import org.jetbrains.kotlin.ir.builders.declarations.addConstructor
import org.jetbrains.kotlin.ir.builders.declarations.buildClass
import org.jetbrains.kotlin.ir.declarations.IrClass
import org.jetbrains.kotlin.ir.declarations.IrConstructor
import org.jetbrains.kotlin.ir.declarations.IrExternalPackageFragment
@@ -79,7 +77,7 @@ class IrBuiltInsOverDescriptors(
private val builtInsModule = builtIns.builtInsModule
private val kotlinInternalPackage = StandardClassIds.BASE_INTERNAL_PACKAGE
private val kotlinInternalIrPackage = IrExternalPackageFragmentImpl.createEmptyExternalPackageFragment(builtInsModule, kotlinInternalPackage)
override val kotlinInternalPackageFragment = IrExternalPackageFragmentImpl.createEmptyExternalPackageFragment(builtInsModule, kotlinInternalPackage)
private val packageFragmentDescriptor = IrBuiltinsPackageFragmentDescriptorImpl(builtInsModule, KOTLIN_INTERNAL_IR_FQN)
@@ -294,17 +292,7 @@ class IrBuiltInsOverDescriptors(
override val anyClass = builtIns.any.toIrSymbol()
override val anyNType = anyType.makeNullable()
private val intrinsicConstAnnotationFqName = kotlinInternalPackage.child(Name.identifier("IntrinsicConstEvaluation"))
private val intrinsicConstClass = irFactory.buildClass {
name = intrinsicConstAnnotationFqName.shortName()
kind = ClassKind.ANNOTATION_CLASS
modality = Modality.FINAL
}.apply {
parent = kotlinInternalIrPackage
createImplicitParameterDeclarationWithWrappedDescriptor()
addConstructor() { isPrimary = true }
addFakeOverrides(IrTypeSystemContextImpl(this@IrBuiltInsOverDescriptors))
}
private val intrinsicConstClass = createIntrinsicConstEvaluationClass()
private val intrinsicConstType = intrinsicConstClass.defaultType
private val intrinsicConstConstructor = intrinsicConstClass.primaryConstructor as IrConstructor
@@ -8,6 +8,10 @@ package org.jetbrains.kotlin.ir
import org.jetbrains.kotlin.builtins.PrimitiveType
import org.jetbrains.kotlin.builtins.UnsignedType
import org.jetbrains.kotlin.config.LanguageVersionSettings
import org.jetbrains.kotlin.descriptors.ClassKind
import org.jetbrains.kotlin.descriptors.Modality
import org.jetbrains.kotlin.ir.builders.declarations.addConstructor
import org.jetbrains.kotlin.ir.builders.declarations.buildClass
import org.jetbrains.kotlin.ir.declarations.IrClass
import org.jetbrains.kotlin.ir.declarations.IrDeclarationOriginImpl
import org.jetbrains.kotlin.ir.declarations.IrExternalPackageFragment
@@ -17,8 +21,12 @@ import org.jetbrains.kotlin.ir.symbols.IrClassifierSymbol
import org.jetbrains.kotlin.ir.symbols.IrPropertySymbol
import org.jetbrains.kotlin.ir.symbols.IrSimpleFunctionSymbol
import org.jetbrains.kotlin.ir.types.IrType
import org.jetbrains.kotlin.ir.types.IrTypeSystemContextImpl
import org.jetbrains.kotlin.ir.util.addFakeOverrides
import org.jetbrains.kotlin.ir.util.createImplicitParameterDeclarationWithWrappedDescriptor
import org.jetbrains.kotlin.name.FqName
import org.jetbrains.kotlin.name.Name
import org.jetbrains.kotlin.name.StandardClassIds
/**
* Symbols for builtins that are available without any context and are not specific to any backend
@@ -190,6 +198,20 @@ abstract class IrBuiltIns {
abstract fun getUnaryOperator(name: Name, receiverType: IrType): IrSimpleFunctionSymbol
abstract val operatorsPackageFragment: IrExternalPackageFragment
abstract val kotlinInternalPackageFragment: IrExternalPackageFragment
protected fun createIntrinsicConstEvaluationClass(): IrClass {
return irFactory.buildClass {
name = StandardClassIds.Annotations.IntrinsicConstEvaluation.shortClassName
kind = ClassKind.ANNOTATION_CLASS
modality = Modality.FINAL
}.apply {
parent = kotlinInternalPackageFragment
createImplicitParameterDeclarationWithWrappedDescriptor()
addConstructor { isPrimary = true }
addFakeOverrides(IrTypeSystemContextImpl(this@IrBuiltIns))
}
}
companion object {
val KOTLIN_INTERNAL_IR_FQN = FqName("kotlin.internal.ir")