[FIR2IR] Create builtin IR class for @IntrinsicConstEvaluation manually if it is missing in stdlib
^KT-59151
This commit is contained in:
committed by
Space Team
parent
3f2e996803
commit
250b94d5dd
+2
-14
@@ -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")
|
||||
|
||||
Reference in New Issue
Block a user