Make descriptor-based API in ir:tree more granular

This commit is contained in:
Mikhail Glukhikh
2020-06-08 15:47:40 +03:00
parent c4b24548cb
commit cbbb497edf
143 changed files with 605 additions and 187 deletions
@@ -11,9 +11,11 @@ import org.jetbrains.kotlin.descriptors.ClassDescriptor
import org.jetbrains.kotlin.fir.backend.Fir2IrComponents
import org.jetbrains.kotlin.fir.resolve.firSymbolProvider
import org.jetbrains.kotlin.fir.symbols.impl.FirClassSymbol
import org.jetbrains.kotlin.ir.DescriptorBasedIr
import org.jetbrains.org.objectweb.asm.Type
class FirJvmBackendClassResolver(val components: Fir2IrComponents) : JvmBackendClassResolver {
@DescriptorBasedIr
override fun resolveToClassDescriptors(type: Type): List<ClassDescriptor> {
if (type.sort != Type.OBJECT) return emptyList()
@@ -30,6 +30,7 @@ import org.jetbrains.kotlin.fir.types.ConeKotlinErrorType
import org.jetbrains.kotlin.fir.types.ConeKotlinType
import org.jetbrains.kotlin.fir.types.FirTypeRef
import org.jetbrains.kotlin.fir.types.coneTypeUnsafe
import org.jetbrains.kotlin.ir.DescriptorBasedIr
import org.jetbrains.kotlin.ir.declarations.IrClass
import org.jetbrains.kotlin.ir.declarations.IrField
import org.jetbrains.kotlin.ir.declarations.IrFunction
@@ -96,6 +97,7 @@ class FirJvmClassCodegen(
}
}
@OptIn(DescriptorBasedIr::class)
override fun generateKotlinMetadataAnnotation() {
val localDelegatedProperties = (irClass.attributeOwnerId as? IrClass)?.let(context.localDelegatedProperties::get)
@@ -23,6 +23,7 @@ import org.jetbrains.kotlin.fir.serialization.FirElementSerializer
import org.jetbrains.kotlin.fir.serialization.FirSerializerExtension
import org.jetbrains.kotlin.fir.serialization.nonSourceAnnotations
import org.jetbrains.kotlin.fir.types.*
import org.jetbrains.kotlin.ir.DescriptorBasedIr
import org.jetbrains.kotlin.ir.declarations.IrClass
import org.jetbrains.kotlin.load.java.JvmAbi
import org.jetbrains.kotlin.load.kotlin.NON_EXISTENT_CLASS_NAME
@@ -75,6 +76,7 @@ class FirJvmSerializerExtension @JvmOverloads constructor(
return classBuilderMode != ClassBuilderMode.ABI || nestedClass.effectiveVisibility != FirEffectiveVisibilityImpl.Private
}
@OptIn(DescriptorBasedIr::class)
override fun serializeClass(
klass: FirClass<*>,
proto: ProtoBuf.Class.Builder,
@@ -27,6 +27,7 @@ import org.jetbrains.kotlin.fir.scopes.impl.FirClassSubstitutionScope
import org.jetbrains.kotlin.fir.symbols.*
import org.jetbrains.kotlin.fir.symbols.impl.*
import org.jetbrains.kotlin.fir.types.*
import org.jetbrains.kotlin.ir.DescriptorBasedIr
import org.jetbrains.kotlin.ir.UNDEFINED_OFFSET
import org.jetbrains.kotlin.ir.declarations.*
import org.jetbrains.kotlin.ir.declarations.impl.*
@@ -45,6 +46,7 @@ import org.jetbrains.kotlin.name.FqName
import org.jetbrains.kotlin.name.Name
import org.jetbrains.kotlin.serialization.deserialization.descriptors.DeserializedContainerSource
@OptIn(DescriptorBasedIr::class)
class Fir2IrDeclarationStorage(
private val components: Fir2IrComponents,
private val moduleDescriptor: FirModuleDescriptor,
@@ -27,6 +27,7 @@ import org.jetbrains.kotlin.fir.types.impl.FirImplicitNullableAnyTypeRef
import org.jetbrains.kotlin.fir.types.impl.FirImplicitStringTypeRef
import org.jetbrains.kotlin.fir.declarations.*
import org.jetbrains.kotlin.incremental.components.NoLookupLocation
import org.jetbrains.kotlin.ir.DescriptorBasedIr
import org.jetbrains.kotlin.ir.UNDEFINED_OFFSET
import org.jetbrains.kotlin.ir.builders.IrGeneratorContextBase
import org.jetbrains.kotlin.ir.declarations.*
@@ -50,6 +51,7 @@ import org.jetbrains.kotlin.name.Name
* fir own logic that traverses class hierarchies in fir elements. Also, this one creates and passes IR elements, instead of providing how
* to declare them, to [DataClassMembersGenerator].
*/
@OptIn(DescriptorBasedIr::class)
class DataClassMembersGenerator(val components: Fir2IrComponents) {
fun generateInlineClassMembers(klass: FirClass<*>, irClass: IrClass): List<Name> =
@@ -8,6 +8,7 @@ package org.jetbrains.kotlin.fir.symbols
import org.jetbrains.kotlin.descriptors.DeclarationDescriptor
import org.jetbrains.kotlin.descriptors.SourceElement
import org.jetbrains.kotlin.descriptors.annotations.Annotations
import org.jetbrains.kotlin.ir.DescriptorBasedIr
import org.jetbrains.kotlin.ir.declarations.*
import org.jetbrains.kotlin.ir.descriptors.*
import org.jetbrains.kotlin.ir.symbols.IrBindableSymbol
@@ -36,6 +37,7 @@ abstract class Fir2IrBindableSymbol<out D : DeclarationDescriptor, B : IrSymbolO
override val isBound: Boolean
get() = _owner != null
@DescriptorBasedIr
override val descriptor: D by lazy {
when (val owner = owner) {
is IrEnumEntry -> WrappedEnumEntryDescriptor().apply { bind(owner) }
@@ -17,6 +17,7 @@
package org.jetbrains.kotlin.backend.common
import org.jetbrains.kotlin.descriptors.*
import org.jetbrains.kotlin.ir.DescriptorBasedIr
import org.jetbrains.kotlin.ir.IrElement
import org.jetbrains.kotlin.ir.declarations.IrClass
import org.jetbrains.kotlin.ir.declarations.IrFunction
@@ -30,6 +31,7 @@ import java.util.*
class Closure(val capturedValues: List<ValueDescriptor>)
@OptIn(DescriptorBasedIr::class)
abstract class AbstractClosureAnnotator : IrElementVisitorVoid {
protected abstract fun recordFunctionClosure(functionDescriptor: FunctionDescriptor, closure: Closure)
protected abstract fun recordClassClosure(classDescriptor: ClassDescriptor, closure: Closure)
@@ -18,6 +18,7 @@ package org.jetbrains.kotlin.backend.common
import org.jetbrains.kotlin.descriptors.VariableDescriptor
import org.jetbrains.kotlin.descriptors.impl.LocalVariableDescriptor
import org.jetbrains.kotlin.ir.DescriptorBasedIr
import org.jetbrains.kotlin.ir.IrElement
import org.jetbrains.kotlin.ir.declarations.IrVariable
import org.jetbrains.kotlin.ir.descriptors.WrappedVariableDescriptor
@@ -29,6 +30,7 @@ import org.jetbrains.kotlin.ir.util.DescriptorsRemapper
import org.jetbrains.kotlin.ir.visitors.acceptVoid
@Suppress("UNCHECKED_CAST")
@OptIn(DescriptorBasedIr::class)
fun <T : IrElement> T.deepCopyWithVariables(): T {
val descriptorsRemapper = object : DescriptorsRemapper {
override fun remapDeclaredVariable(descriptor: VariableDescriptor) = WrappedVariableDescriptor()
@@ -6,6 +6,7 @@
package org.jetbrains.kotlin.backend.common
import org.jetbrains.kotlin.descriptors.*
import org.jetbrains.kotlin.ir.DescriptorBasedIr
import org.jetbrains.kotlin.ir.IrElement
import org.jetbrains.kotlin.ir.declarations.*
import org.jetbrains.kotlin.ir.descriptors.*
@@ -50,6 +51,7 @@ object DescriptorsToIrRemapper : DescriptorsRemapper {
WrappedValueParameterDescriptor(descriptor.annotations, descriptor.source)
}
@OptIn(DescriptorBasedIr::class)
object WrappedDescriptorPatcher : IrElementVisitorVoid {
override fun visitElement(element: IrElement) {
element.acceptChildrenVoid(this)
@@ -16,6 +16,7 @@
package org.jetbrains.kotlin.backend.common
import org.jetbrains.kotlin.ir.DescriptorBasedIr
import org.jetbrains.kotlin.ir.IrElement
import org.jetbrains.kotlin.ir.IrStatement
import org.jetbrains.kotlin.ir.builders.Scope
@@ -101,6 +102,7 @@ abstract class IrElementTransformerVoidWithContext : IrElementTransformerVoid()
protected val allScopes get() = scopeStack
protected val currentDeclarationParent get() = scopeStack.lastOrNull { it.irElement is IrDeclarationParent }?.irElement as? IrDeclarationParent
@DescriptorBasedIr
fun printScopeStack() {
scopeStack.forEach { println(it.scope.scopeOwner) }
}
@@ -138,6 +140,7 @@ abstract class IrElementTransformerVoidWithContext : IrElementTransformerVoid()
}
}
@OptIn(DescriptorBasedIr::class)
abstract class IrElementVisitorVoidWithContext : IrElementVisitorVoid {
private val scopeStack = mutableListOf<ScopeWithIr>()
@@ -198,6 +201,7 @@ abstract class IrElementVisitorVoidWithContext : IrElementVisitorVoid {
protected val parentScope get() = if (scopeStack.size < 2) null else scopeStack[scopeStack.size - 2]
protected val allScopes get() = scopeStack
@DescriptorBasedIr
fun printScopeStack() {
scopeStack.forEach { println(it.scope.scopeOwner) }
}
@@ -16,6 +16,7 @@
package org.jetbrains.kotlin.backend.common
import org.jetbrains.kotlin.ir.DescriptorBasedIr
import org.jetbrains.kotlin.ir.IrElement
import org.jetbrains.kotlin.ir.declarations.IrClass
import org.jetbrains.kotlin.ir.declarations.IrFunction
@@ -34,6 +35,7 @@ import org.jetbrains.kotlin.ir.visitors.IrElementVisitor
* It is also not guaranteed that each returned call is detected as tail recursion by the frontend.
* However any returned call can be correctly optimized as tail recursion.
*/
@OptIn(DescriptorBasedIr::class)
fun collectTailRecursionCalls(irFunction: IrFunction): Set<IrCall> {
if ((irFunction as? IrSimpleFunction)?.isTailrec != true) {
return emptySet()
@@ -12,6 +12,7 @@ import org.jetbrains.kotlin.descriptors.ClassDescriptor
import org.jetbrains.kotlin.descriptors.SimpleFunctionDescriptor
import org.jetbrains.kotlin.descriptors.findClassAcrossModuleDependencies
import org.jetbrains.kotlin.incremental.components.NoLookupLocation
import org.jetbrains.kotlin.ir.DescriptorBasedIr
import org.jetbrains.kotlin.ir.declarations.IrFunction
import org.jetbrains.kotlin.ir.declarations.IrModuleFragment
import org.jetbrains.kotlin.ir.declarations.IrPackageFragment
@@ -109,6 +110,8 @@ open class BuiltinSymbolsBase(protected val irBuiltIns: IrBuiltIns, protected va
val intProgression = progression("IntProgression")
val longProgression = progression("LongProgression")
val progressionClasses = listOfNotNull(charProgression, intProgression, longProgression, uIntProgression, uLongProgression)
@DescriptorBasedIr
val progressionClassesTypes = progressionClasses.map { it.descriptor.defaultType }.toSet()
val getProgressionLastElementByReturnType = builtInsPackage("kotlin", "internal")
@@ -143,6 +146,8 @@ open class BuiltinSymbolsBase(protected val irBuiltIns: IrBuiltIns, protected va
val long = symbolTable.referenceClass(builtIns.long)
val integerClasses = listOf(byte, short, int, long)
@DescriptorBasedIr
val integerClassesTypes = integerClasses.map { it.descriptor.defaultType }
val arrayOf = getSimpleFunction(Name.identifier("arrayOf")) {
@@ -6,6 +6,7 @@
package org.jetbrains.kotlin.backend.common.ir
import org.jetbrains.kotlin.backend.common.lower.VariableRemapper
import org.jetbrains.kotlin.ir.DescriptorBasedIr
import org.jetbrains.kotlin.ir.IrStatement
import org.jetbrains.kotlin.ir.declarations.*
import org.jetbrains.kotlin.ir.expressions.*
@@ -86,6 +87,7 @@ private fun IrBody.move(
// TODO use a generic inliner (e.g. JS/Native's FunctionInlining.Inliner)
// Inline simple function calls without type parameters, default parameters, or varargs.
@OptIn(DescriptorBasedIr::class)
fun IrFunction.inline(target: IrDeclarationParent, arguments: List<IrValueDeclaration> = listOf()): IrReturnableBlock =
IrReturnableBlockImpl(startOffset, endOffset, returnType, IrReturnableBlockSymbolImpl(descriptor), null, symbol).apply {
statements += body!!.move(this@inline, target, symbol, valueParameters.zip(arguments).toMap()).statements
@@ -12,6 +12,7 @@ import org.jetbrains.kotlin.descriptors.Modality
import org.jetbrains.kotlin.descriptors.Visibilities
import org.jetbrains.kotlin.descriptors.Visibility
import org.jetbrains.kotlin.descriptors.annotations.Annotations
import org.jetbrains.kotlin.ir.DescriptorBasedIr
import org.jetbrains.kotlin.ir.IrElement
import org.jetbrains.kotlin.ir.UNDEFINED_OFFSET
import org.jetbrains.kotlin.ir.builders.Scope
@@ -130,6 +131,7 @@ fun IrCall.getAnnotationClass(): IrClass {
val IrTypeParametersContainer.classIfConstructor get() = if (this is IrConstructor) parentAsClass else this
@OptIn(DescriptorBasedIr::class)
fun IrValueParameter.copyTo(
irFunction: IrFunction,
origin: IrDeclarationOrigin = this.origin,
@@ -172,6 +174,7 @@ fun IrValueParameter.copyTo(
}
}
@OptIn(DescriptorBasedIr::class)
fun IrTypeParameter.copyToWithoutSuperTypes(
target: IrTypeParametersContainer,
index: Int = this.index,
@@ -185,6 +188,7 @@ fun IrTypeParameter.copyToWithoutSuperTypes(
}
}
@OptIn(DescriptorBasedIr::class)
fun IrFunction.copyReceiverParametersFrom(from: IrFunction) {
dispatchReceiverParameter = from.dispatchReceiverParameter?.let {
IrValueParameterImpl(it.startOffset, it.endOffset, it.origin, it.descriptor, it.type, it.varargElementType).also {
@@ -457,6 +461,7 @@ fun IrClass.createParameterDeclarations() {
}
}
@OptIn(DescriptorBasedIr::class)
fun IrFunction.createDispatchReceiverParameter(origin: IrDeclarationOrigin? = null) {
assert(dispatchReceiverParameter == null)
@@ -479,7 +484,7 @@ val IrFunction.allParameters: List<IrValueParameter>
get() = if (this is IrConstructor) {
listOf(
this.constructedClass.thisReceiver
?: error(this.descriptor)
?: error(this.render())
) + explicitParameters
} else {
explicitParameters
@@ -548,6 +553,7 @@ fun IrClass.addFakeOverridesViaIncorrectHeuristic(implementedMembers: List<IrSim
}
}
@OptIn(DescriptorBasedIr::class)
fun createStaticFunctionWithReceivers(
irParent: IrDeclarationParent,
name: Name,
@@ -10,6 +10,7 @@ import org.jetbrains.kotlin.backend.common.ir.*
import org.jetbrains.kotlin.descriptors.ClassKind
import org.jetbrains.kotlin.descriptors.Modality
import org.jetbrains.kotlin.descriptors.Visibilities
import org.jetbrains.kotlin.ir.DescriptorBasedIr
import org.jetbrains.kotlin.ir.IrElement
import org.jetbrains.kotlin.ir.builders.*
import org.jetbrains.kotlin.ir.declarations.*
@@ -38,6 +39,7 @@ import org.jetbrains.kotlin.ir.util.*
import org.jetbrains.kotlin.ir.visitors.*
import org.jetbrains.kotlin.name.Name
@DescriptorBasedIr
abstract class AbstractSuspendFunctionsLowering<C : CommonBackendContext>(val context: C) : FileLoweringPass {
protected object STATEMENT_ORIGIN_COROUTINE_IMPL : IrStatementOriginImpl("COROUTINE_IMPL")
@@ -11,6 +11,7 @@ import org.jetbrains.kotlin.backend.common.ir.*
import org.jetbrains.kotlin.descriptors.Modality
import org.jetbrains.kotlin.descriptors.Visibilities
import org.jetbrains.kotlin.descriptors.Visibility
import org.jetbrains.kotlin.ir.DescriptorBasedIr
import org.jetbrains.kotlin.ir.UNDEFINED_OFFSET
import org.jetbrains.kotlin.ir.builders.*
import org.jetbrains.kotlin.ir.builders.declarations.addValueParameter
@@ -282,7 +283,11 @@ open class DefaultParameterInjector(
expression.transformChildrenVoid()
return visitFunctionAccessExpression(expression) {
with(expression) {
IrDelegatingConstructorCallImpl(startOffset, endOffset, type, it as IrConstructorSymbol, typeArgumentsCount)
IrDelegatingConstructorCallImpl(
startOffset, endOffset, type, it as IrConstructorSymbol,
typeArgumentsCount = typeArgumentsCount,
valueArgumentsCount = it.owner.valueParameters.size
)
}
}
}
@@ -300,7 +305,11 @@ open class DefaultParameterInjector(
expression.transformChildrenVoid()
return visitFunctionAccessExpression(expression) {
with(expression) {
IrEnumConstructorCallImpl(startOffset, endOffset, type, it as IrConstructorSymbol)
IrEnumConstructorCallImpl(
startOffset, endOffset, type, it as IrConstructorSymbol,
typeArgumentsCount = typeArgumentsCount,
valueArgumentsCount = it.owner.valueParameters.size
)
}
}
}
@@ -309,7 +318,13 @@ open class DefaultParameterInjector(
expression.transformChildrenVoid()
return visitFunctionAccessExpression(expression) {
with(expression) {
IrCallImpl(startOffset, endOffset, type, it, typeArgumentsCount, DEFAULT_DISPATCH_CALL, superQualifierSymbol)
IrCallImpl(
startOffset, endOffset, type, it,
typeArgumentsCount = typeArgumentsCount,
valueArgumentsCount = it.owner.valueParameters.size,
origin = DEFAULT_DISPATCH_CALL,
superQualifierSymbol = superQualifierSymbol
)
}
}
}
@@ -480,6 +495,7 @@ private fun IrFunction.generateDefaultsFunction(
return null
}
@OptIn(DescriptorBasedIr::class)
private fun IrFunction.generateDefaultsFunctionImpl(
context: CommonBackendContext,
newOrigin: IrDeclarationOrigin,
@@ -102,7 +102,12 @@ open class EnumWhenLowering(protected val context: CommonBackendContext) : IrEle
else -> return super.visitCall(expression)
}
val subjectOrdinal = topmostOrdinalProvider.value
return IrCallImpl(expression.startOffset, expression.endOffset, expression.type, expression.symbol).apply {
return IrCallImpl(
expression.startOffset, expression.endOffset,
expression.type, expression.symbol,
typeArgumentsCount = 0,
valueArgumentsCount = 2
).apply {
putValueArgument(0, IrGetValueImpl(lhs.startOffset, lhs.endOffset, subjectOrdinal.type, subjectOrdinal.symbol))
putValueArgument(1, IrConstImpl.int(rhs.startOffset, rhs.endOffset, context.irBuiltIns.intType, entryOrdinal))
}
@@ -17,13 +17,11 @@ import org.jetbrains.kotlin.ir.symbols.IrConstructorSymbol
import org.jetbrains.kotlin.ir.symbols.IrValueParameterSymbol
import org.jetbrains.kotlin.ir.symbols.IrValueSymbol
import org.jetbrains.kotlin.ir.types.classOrNull
import org.jetbrains.kotlin.ir.util.deepCopyWithSymbols
import org.jetbrains.kotlin.ir.util.dump
import org.jetbrains.kotlin.ir.util.parentAsClass
import org.jetbrains.kotlin.ir.util.patchDeclarationParents
import org.jetbrains.kotlin.ir.visitors.IrElementTransformerVoid
import org.jetbrains.kotlin.ir.visitors.transformChildrenVoid
import org.jetbrains.kotlin.utils.addToStdlib.cast
class InnerClassesLowering(val context: BackendContext) : DeclarationTransformer {
@@ -225,7 +223,9 @@ class InnerClassConstructorCallsLowering(val context: BackendContext) : BodyLowe
val newCallee = context.declarationFactory.getInnerClassConstructorWithOuterThisParameter(classConstructor)
val newCall = IrDelegatingConstructorCallImpl(
expression.startOffset, expression.endOffset, context.irBuiltIns.unitType, newCallee.symbol, expression.typeArgumentsCount
expression.startOffset, expression.endOffset, context.irBuiltIns.unitType, newCallee.symbol,
typeArgumentsCount = expression.typeArgumentsCount,
valueArgumentsCount = newCallee.valueParameters.size
).apply { copyTypeArgumentsFrom(expression) }
newCall.putValueArgument(0, dispatchReceiver)
@@ -258,9 +258,10 @@ class InnerClassConstructorCallsLowering(val context: BackendContext) : BodyLowe
endOffset,
type,
newCallee.symbol,
typeArgumentsCount,
newReflectionTarget?.symbol,
origin
typeArgumentsCount = typeArgumentsCount,
valueArgumentsCount = newCallee.valueParameters.size,
reflectionTarget = newReflectionTarget?.symbol,
origin = origin
)
}
@@ -12,6 +12,7 @@ import org.jetbrains.kotlin.descriptors.Modality
import org.jetbrains.kotlin.descriptors.ReceiverParameterDescriptor
import org.jetbrains.kotlin.descriptors.Visibilities
import org.jetbrains.kotlin.descriptors.Visibility
import org.jetbrains.kotlin.ir.DescriptorBasedIr
import org.jetbrains.kotlin.ir.IrElement
import org.jetbrains.kotlin.ir.IrStatement
import org.jetbrains.kotlin.ir.UNDEFINED_OFFSET
@@ -47,7 +48,6 @@ import org.jetbrains.kotlin.ir.visitors.acceptChildrenVoid
import org.jetbrains.kotlin.ir.visitors.acceptVoid
import org.jetbrains.kotlin.ir.visitors.transformChildrenVoid
import org.jetbrains.kotlin.name.Name
import org.jetbrains.kotlin.utils.addToStdlib.safeAs
import java.util.*
interface LocalNameProvider {
@@ -229,6 +229,7 @@ class LocalDeclarationsLowering(
abbreviation.annotations
)
@OptIn(DescriptorBasedIr::class)
private inner class LocalDeclarationsTransformer(
val irElement: IrElement, val container: IrDeclaration, val classesToLower: Set<IrClass>?
) {
@@ -358,7 +359,8 @@ class LocalDeclarationsLowering(
expression.startOffset, expression.endOffset,
context.irBuiltIns.unitType,
newCallee.symbol,
expression.typeArgumentsCount
typeArgumentsCount = expression.typeArgumentsCount,
valueArgumentsCount = newCallee.valueParameters.size
).also {
it.fillArguments2(expression, newCallee)
it.copyTypeArgumentsFrom(expression)
@@ -416,9 +418,10 @@ class LocalDeclarationsLowering(
expression.startOffset, expression.endOffset,
expression.type, // TODO functional type for transformed descriptor
newCallee.symbol,
newCallee.typeParameters.size,
newReflectionTarget?.symbol,
expression.origin
typeArgumentsCount = newCallee.typeParameters.size,
valueArgumentsCount = newCallee.valueParameters.size,
reflectionTarget = newReflectionTarget?.symbol,
origin = expression.origin
).also {
it.fillArguments2(expression, newCallee)
it.setLocalTypeArguments(oldCallee)
@@ -519,9 +522,10 @@ class LocalDeclarationsLowering(
oldCall.startOffset, oldCall.endOffset,
newCallee.returnType,
newCallee.symbol,
newCallee.typeParameters.size,
oldCall.origin,
oldCall.superQualifierSymbol
typeArgumentsCount = newCallee.typeParameters.size,
valueArgumentsCount = newCallee.valueParameters.size,
origin = oldCall.origin,
superQualifierSymbol = oldCall.superQualifierSymbol
).also {
it.setLocalTypeArguments(oldCall.symbol.owner)
it.copyTypeArgumentsFrom(oldCall, shift = newCallee.typeParameters.size - oldCall.typeArgumentsCount)
@@ -19,6 +19,7 @@ package org.jetbrains.kotlin.backend.common.lower
import org.jetbrains.kotlin.backend.common.BackendContext
import org.jetbrains.kotlin.descriptors.*
import org.jetbrains.kotlin.descriptors.impl.ValueParameterDescriptorImpl
import org.jetbrains.kotlin.ir.DescriptorBasedIr
import org.jetbrains.kotlin.ir.IrElement
import org.jetbrains.kotlin.ir.IrStatement
import org.jetbrains.kotlin.ir.UNDEFINED_OFFSET
@@ -63,6 +64,7 @@ open class VariableRemapper(val mapping: Map<IrValueParameter, IrValueDeclaratio
mapping[value]
}
@DescriptorBasedIr
class VariableRemapperDesc(val mapping: Map<ValueDescriptor, IrValueParameter>) : AbstractVariableRemapper() {
override fun remapVariable(value: IrValueDeclaration): IrValueDeclaration? =
mapping[value.descriptor]
@@ -158,6 +160,7 @@ open class IrBuildingTransformer(private val context: BackendContext) : IrElemen
}
}
@OptIn(DescriptorBasedIr::class)
fun IrConstructor.callsSuper(irBuiltIns: IrBuiltIns): Boolean {
val constructedClass = parent as IrClass
val superClass = constructedClass.superTypes
@@ -42,6 +42,7 @@ class ProvisionalFunctionExpressionLowering :
startOffset, endOffset, type,
function.symbol,
typeArgumentsCount = 0,
valueArgumentsCount = function.valueParameters.size,
reflectionTarget = null,
origin = origin
)
@@ -11,6 +11,7 @@ import org.jetbrains.kotlin.backend.common.ir.Symbols
import org.jetbrains.kotlin.backend.common.ir.createTemporaryVariableWithWrappedDescriptor
import org.jetbrains.kotlin.backend.common.lower.createIrBuilder
import org.jetbrains.kotlin.config.languageVersionSettings
import org.jetbrains.kotlin.ir.DescriptorBasedIr
import org.jetbrains.kotlin.ir.IrElement
import org.jetbrains.kotlin.ir.IrStatement
import org.jetbrains.kotlin.ir.UNDEFINED_OFFSET
@@ -36,6 +37,7 @@ interface InlineFunctionResolver {
fun getFunctionDeclaration(symbol: IrFunctionSymbol): IrFunction
}
@OptIn(DescriptorBasedIr::class)
open class DefaultInlineFunctionResolver(open val context: CommonBackendContext) : InlineFunctionResolver {
override fun getFunctionDeclaration(symbol: IrFunctionSymbol): IrFunction {
val descriptor = symbol.descriptor.original
@@ -56,6 +58,7 @@ open class DefaultInlineFunctionResolver(open val context: CommonBackendContext)
}
}
@OptIn(DescriptorBasedIr::class)
class FunctionInlining(
val context: CommonBackendContext,
val inlineFunctionResolver: InlineFunctionResolver
@@ -164,10 +167,6 @@ class FunctionInlining(
statements.transform { it.transform(transformer, data = null) }
statements.addAll(0, evaluationStatements)
val isCoroutineIntrinsicCall = callSite.symbol.descriptor.isBuiltInSuspendCoroutineUninterceptedOrReturn(
context.configuration.languageVersionSettings
)
return IrReturnableBlockImpl(
startOffset = callSite.startOffset,
endOffset = callSite.endOffset,
@@ -414,7 +413,7 @@ class FunctionInlining(
}
else -> {
val message = "Incomplete expression: call to ${callee.descriptor} " +
val message = "Incomplete expression: call to ${callee.render()} " +
"has no argument at index ${parameter.index}"
throw Error(message)
}
@@ -12,6 +12,7 @@ import org.jetbrains.kotlin.backend.common.lower.matchers.Quantifier
import org.jetbrains.kotlin.backend.common.lower.matchers.SimpleCalleeMatcher
import org.jetbrains.kotlin.backend.common.lower.matchers.createIrCallMatcher
import org.jetbrains.kotlin.backend.common.lower.matchers.singleArgumentExtension
import org.jetbrains.kotlin.ir.DescriptorBasedIr
import org.jetbrains.kotlin.ir.builders.*
import org.jetbrains.kotlin.ir.declarations.IrSimpleFunction
import org.jetbrains.kotlin.ir.declarations.IrVariable
@@ -555,6 +556,7 @@ internal class CharSequenceIndicesHandler(context: CommonBackendContext) : Indic
}
/** Builds a [HeaderInfo] for calls to reverse an iterable. */
@OptIn(DescriptorBasedIr::class)
internal class ReversedHandler(context: CommonBackendContext, private val visitor: HeaderInfoBuilder) :
HeaderInfoFromCallHandler<Nothing?> {
@@ -10,6 +10,7 @@ package org.jetbrains.kotlin.backend.common.lower.loops
import org.jetbrains.kotlin.backend.common.CommonBackendContext
import org.jetbrains.kotlin.backend.common.ir.Symbols
import org.jetbrains.kotlin.backend.common.lower.DeclarationIrBuilder
import org.jetbrains.kotlin.ir.DescriptorBasedIr
import org.jetbrains.kotlin.ir.builders.irChar
import org.jetbrains.kotlin.ir.builders.irInt
import org.jetbrains.kotlin.ir.builders.irLong
@@ -48,8 +49,12 @@ internal sealed class ProgressionType(
it.name == numberCastFunctionName &&
it.dispatchReceiverParameter != null && it.extensionReceiverParameter == null && it.valueParameters.isEmpty()
}
IrCallImpl(startOffset, endOffset, castFun.returnType, castFun.symbol)
.apply { dispatchReceiver = this@castIfNecessary }
IrCallImpl(
startOffset, endOffset,
castFun.returnType, castFun.symbol,
typeArgumentsCount = 0,
valueArgumentsCount = 0
).apply { dispatchReceiver = this@castIfNecessary }
}
companion object {
@@ -139,14 +144,25 @@ internal abstract class UnsignedProgressionType(
if (type == unsignedType) return this
return if (unsafeCoerceIntrinsic != null) {
IrCallImpl(startOffset, endOffset, unsignedType, unsafeCoerceIntrinsic).apply {
IrCallImpl(
startOffset, endOffset,
unsignedType,
unsafeCoerceIntrinsic,
typeArgumentsCount = 2,
valueArgumentsCount = 1
).apply {
putTypeArgument(0, fromType)
putTypeArgument(1, unsignedType)
putValueArgument(0, this@asUnsigned)
}
} else {
// Fallback to calling `toUInt/ULong()` extension function.
IrCallImpl(startOffset, endOffset, unsignedConversionFunction.owner.returnType, unsignedConversionFunction).apply {
IrCallImpl(
startOffset, endOffset, unsignedConversionFunction.owner.returnType,
unsignedConversionFunction,
typeArgumentsCount = 0,
valueArgumentsCount = 0
).apply {
extensionReceiver = this@asUnsigned
}
}
@@ -157,7 +173,12 @@ internal abstract class UnsignedProgressionType(
if (type == toType) return this
return if (unsafeCoerceIntrinsic != null) {
IrCallImpl(startOffset, endOffset, toType, unsafeCoerceIntrinsic).apply {
IrCallImpl(
startOffset, endOffset, toType,
unsafeCoerceIntrinsic,
typeArgumentsCount = 2,
valueArgumentsCount = 1
).apply {
putTypeArgument(0, unsignedType)
putTypeArgument(1, toType)
putValueArgument(0, this@asSigned)
@@ -169,6 +190,7 @@ internal abstract class UnsignedProgressionType(
}
}
@OptIn(DescriptorBasedIr::class)
internal class UIntProgressionType(symbols: Symbols<CommonBackendContext>) :
UnsignedProgressionType(
symbols,
@@ -186,6 +208,7 @@ internal class UIntProgressionType(symbols: Symbols<CommonBackendContext>) :
override fun DeclarationIrBuilder.zeroStepExpression() = irInt(0)
}
@OptIn(DescriptorBasedIr::class)
internal class ULongProgressionType(symbols: Symbols<CommonBackendContext>) :
UnsignedProgressionType(
symbols,
@@ -8,7 +8,6 @@ package org.jetbrains.kotlin.backend.common.lower.loops
import org.jetbrains.kotlin.backend.common.lower.DeclarationIrBuilder
import org.jetbrains.kotlin.ir.builders.createTmpVariable
import org.jetbrains.kotlin.ir.builders.irGet
import org.jetbrains.kotlin.ir.declarations.IrValueDeclaration
import org.jetbrains.kotlin.ir.declarations.IrVariable
import org.jetbrains.kotlin.ir.expressions.IrConst
import org.jetbrains.kotlin.ir.expressions.IrConstKind
@@ -16,7 +15,6 @@ import org.jetbrains.kotlin.ir.expressions.IrExpression
import org.jetbrains.kotlin.ir.expressions.IrGetValue
import org.jetbrains.kotlin.ir.expressions.impl.IrCallImpl
import org.jetbrains.kotlin.ir.expressions.impl.IrConstImpl
import org.jetbrains.kotlin.ir.symbols.IrVariableSymbol
import org.jetbrains.kotlin.ir.types.IrType
import org.jetbrains.kotlin.ir.types.getClass
import org.jetbrains.kotlin.ir.types.isNothing
@@ -36,7 +34,12 @@ internal fun IrExpression.negate(): IrExpression {
it.name == OperatorNameConventions.UNARY_MINUS &&
it.valueParameters.isEmpty()
}
IrCallImpl(startOffset, endOffset, type, unaryMinusFun.symbol).apply {
IrCallImpl(
startOffset, endOffset, type,
unaryMinusFun.symbol,
valueArgumentsCount = 0,
typeArgumentsCount = 0
).apply {
dispatchReceiver = this@negate
}
}
@@ -54,7 +57,12 @@ internal fun IrExpression.decrement(): IrExpression {
it.name == OperatorNameConventions.DEC &&
it.valueParameters.isEmpty()
}
IrCallImpl(startOffset, endOffset, type, decFun.symbol).apply {
IrCallImpl(
startOffset, endOffset, type,
decFun.symbol,
valueArgumentsCount = 0,
typeArgumentsCount = 0
).apply {
dispatchReceiver = this@decrement
}
}
@@ -5,6 +5,7 @@
package org.jetbrains.kotlin.backend.common.lower.matchers
import org.jetbrains.kotlin.ir.DescriptorBasedIr
import org.jetbrains.kotlin.ir.declarations.IrFunction
import org.jetbrains.kotlin.ir.declarations.IrValueParameter
import org.jetbrains.kotlin.ir.types.IrType
@@ -51,6 +52,7 @@ internal class ParameterCountMatcher(
}
}
@OptIn(DescriptorBasedIr::class)
internal class FqNameMatcher(
val restriction: (FqName) -> Boolean
) : IrFunctionMatcher {
@@ -12,6 +12,7 @@ import org.jetbrains.kotlin.backend.common.ir.copyTypeParametersFrom
import org.jetbrains.kotlin.descriptors.ClassKind
import org.jetbrains.kotlin.descriptors.Visibilities
import org.jetbrains.kotlin.descriptors.Visibility
import org.jetbrains.kotlin.ir.DescriptorBasedIr
import org.jetbrains.kotlin.ir.UNDEFINED_OFFSET
import org.jetbrains.kotlin.ir.backend.js.JsMapping
import org.jetbrains.kotlin.ir.backend.js.ir.JsIrBuilder
@@ -94,6 +95,7 @@ class JsDeclarationFactory(mapping: JsMapping) : DeclarationFactory {
return originalInnerClassPrimaryConstructorByClass[innerClass]
}
@OptIn(DescriptorBasedIr::class)
private fun createInnerClassConstructorWithOuterThisParameter(oldConstructor: IrConstructor): IrConstructor {
val irClass = oldConstructor.parent as IrClass
val outerThisType = (irClass.parent as IrClass).defaultType
@@ -14,10 +14,7 @@ import org.jetbrains.kotlin.config.CompilerConfiguration
import org.jetbrains.kotlin.descriptors.*
import org.jetbrains.kotlin.descriptors.impl.EmptyPackageFragmentDescriptor
import org.jetbrains.kotlin.incremental.components.NoLookupLocation
import org.jetbrains.kotlin.ir.IrElement
import org.jetbrains.kotlin.ir.SourceManager
import org.jetbrains.kotlin.ir.SourceRangeInfo
import org.jetbrains.kotlin.ir.UNDEFINED_OFFSET
import org.jetbrains.kotlin.ir.*
import org.jetbrains.kotlin.ir.backend.js.ir.JsIrBuilder
import org.jetbrains.kotlin.ir.backend.js.utils.OperatorNames
import org.jetbrains.kotlin.ir.declarations.*
@@ -60,6 +57,8 @@ class JsIrBackendContext(
val externalPackageFragment = mutableMapOf<IrFileSymbol, IrFile>()
val externalDeclarations = hashSetOf<IrDeclaration>()
@OptIn(DescriptorBasedIr::class)
val bodilessBuiltInsPackageFragment: IrPackageFragment = run {
class DescriptorlessExternalPackageFragmentSymbol : IrExternalPackageFragmentSymbol {
@@ -45,10 +45,15 @@ class JsSharedVariablesManager(val builtIns: IrBuiltIns, val implicitDeclaration
val constructorSymbol = closureBoxConstructorDeclaration.symbol
val irCall =
IrConstructorCallImpl.fromSymbolDescriptor(initializer.startOffset, initializer.endOffset, closureBoxType, constructorSymbol)
.apply {
putValueArgument(0, initializer)
}
IrConstructorCallImpl(
initializer.startOffset, initializer.endOffset,
closureBoxType, constructorSymbol,
valueArgumentsCount = 1,
typeArgumentsCount = 0,
constructorTypeArgumentsCount = 0
).apply {
putValueArgument(0, initializer)
}
val descriptor = WrappedVariableDescriptor()
return IrVariableImpl(
@@ -26,20 +26,23 @@ object JsIrBuilder {
object SYNTHESIZED_STATEMENT : IrStatementOriginImpl("SYNTHESIZED_STATEMENT")
object SYNTHESIZED_DECLARATION : IrDeclarationOriginImpl("SYNTHESIZED_DECLARATION")
fun buildCall(target: IrFunctionSymbol, type: IrType? = null, typeArguments: List<IrType>? = null): IrCall =
IrCallImpl(
fun buildCall(target: IrFunctionSymbol, type: IrType? = null, typeArguments: List<IrType>? = null): IrCall {
val owner = target.owner
return IrCallImpl(
UNDEFINED_OFFSET,
UNDEFINED_OFFSET,
type ?: target.owner.returnType,
type ?: owner.returnType,
target,
target.owner.typeParameters.size,
SYNTHESIZED_STATEMENT
typeArgumentsCount = owner.typeParameters.size,
valueArgumentsCount = owner.valueParameters.size,
origin = SYNTHESIZED_STATEMENT
).apply {
typeArguments?.let {
assert(typeArguments.size == typeArgumentsCount)
it.withIndex().forEach { (i, t) -> putTypeArgument(i, t) }
}
}
}
fun buildReturn(targetSymbol: IrFunctionSymbol, value: IrExpression, type: IrType) =
IrReturnImpl(UNDEFINED_OFFSET, UNDEFINED_OFFSET, type, targetSymbol, value)
@@ -191,9 +194,6 @@ object JsIrBuilder {
fun buildComposite(type: IrType, statements: List<IrStatement> = emptyList()) =
IrCompositeImpl(UNDEFINED_OFFSET, UNDEFINED_OFFSET, type, SYNTHESIZED_STATEMENT, statements)
fun buildFunctionReference(type: IrType, symbol: IrFunctionSymbol, reflectionTarget: IrFunctionSymbol? = symbol) =
IrFunctionReferenceImpl(UNDEFINED_OFFSET, UNDEFINED_OFFSET, type, symbol, 0, reflectionTarget, null)
fun buildFunctionExpression(type: IrType, function: IrSimpleFunction) =
IrFunctionExpressionImpl(UNDEFINED_OFFSET, UNDEFINED_OFFSET, type, function, SYNTHESIZED_STATEMENT)
@@ -15,6 +15,7 @@ import org.jetbrains.kotlin.backend.common.ir.isMethodOfAny
import org.jetbrains.kotlin.backend.common.ir.isSuspend
import org.jetbrains.kotlin.backend.common.lower.*
import org.jetbrains.kotlin.descriptors.Modality
import org.jetbrains.kotlin.ir.DescriptorBasedIr
import org.jetbrains.kotlin.ir.UNDEFINED_OFFSET
import org.jetbrains.kotlin.ir.backend.js.JsLoweredDeclarationOrigin
import org.jetbrains.kotlin.ir.backend.js.ir.JsIrBuilder
@@ -48,6 +49,7 @@ import org.jetbrains.kotlin.ir.util.*
// fun foo(t: Any?) = foo(t as Int) // Constructed bridge
// }
//
@OptIn(DescriptorBasedIr::class)
class BridgesConstruction(val context: CommonBackendContext) : DeclarationTransformer {
private val specialBridgeMethods = SpecialBridgeMethods(context)
@@ -131,6 +131,11 @@ class CreateScriptFunctionsPhase(val context: CommonBackendContext) : FileLoweri
}
private fun createCall(function: IrFunction): IrCall {
return IrCallImpl(UNDEFINED_OFFSET, UNDEFINED_OFFSET, function.returnType, function.symbol)
return IrCallImpl(
UNDEFINED_OFFSET, UNDEFINED_OFFSET, function.returnType,
function.symbol,
valueArgumentsCount = function.valueParameters.size,
typeArgumentsCount = function.typeParameters.size
)
}
}
@@ -528,7 +528,12 @@ class EnumSyntheticFunctionsLowering(val context: JsIrBackendContext): Declarati
private fun List<IrExpression>.toArrayLiteral(arrayType: IrType, elementType: IrType): IrExpression {
val irVararg = IrVarargImpl(UNDEFINED_OFFSET, UNDEFINED_OFFSET, arrayType, elementType, this)
return IrCallImpl(UNDEFINED_OFFSET, UNDEFINED_OFFSET, arrayType, context.intrinsics.arrayLiteral).apply {
return IrCallImpl(
UNDEFINED_OFFSET, UNDEFINED_OFFSET, arrayType,
context.intrinsics.arrayLiteral,
typeArgumentsCount = 0,
valueArgumentsCount = 1
).apply {
putValueArgument(0, irVararg)
}
}
@@ -80,6 +80,7 @@ class JsDefaultCallbackGenerator(val context: JsIrBackendContext): BodyLoweringP
context.irBuiltIns.anyType,
originalFunction.symbol,
typeArgumentsCount = 0,
valueArgumentsCount = originalFunction.valueParameters.size,
reflectionTarget = originalFunction.symbol,
origin = BIND_CALL
)
@@ -91,8 +92,10 @@ class JsDefaultCallbackGenerator(val context: JsIrBackendContext): BodyLoweringP
endOffset,
context.irBuiltIns.anyType,
context.intrinsics.jsBind.symbol,
BIND_CALL,
superQualifierSymbol
valueArgumentsCount = 2,
typeArgumentsCount = 0,
origin = BIND_CALL,
superQualifierSymbol = superQualifierSymbol
)
}.apply {
putValueArgument(0, irCall.dispatchReceiver?.deepCopyWithSymbols())
@@ -8,6 +8,7 @@ package org.jetbrains.kotlin.ir.backend.js.lower
import org.jetbrains.kotlin.backend.common.DeclarationTransformer
import org.jetbrains.kotlin.backend.common.ir.addChild
import org.jetbrains.kotlin.descriptors.PackageFragmentDescriptor
import org.jetbrains.kotlin.ir.DescriptorBasedIr
import org.jetbrains.kotlin.ir.IrElement
import org.jetbrains.kotlin.ir.backend.js.JsIrBackendContext
import org.jetbrains.kotlin.ir.backend.js.utils.getJsModule
@@ -49,6 +50,7 @@ private class DescriptorlessIrFileSymbol : IrFileSymbol {
_owner = owner
}
@DescriptorBasedIr
override val descriptor: PackageFragmentDescriptor
get() = error("Operation is unsupported")
@@ -71,7 +71,12 @@ class DelegateToSyntheticPrimaryConstructor(context: JsCommonBackendContext) : B
override fun visitDeclaration(declaration: IrDeclaration) = declaration // optimize visiting
override fun visitInstanceInitializerCall(expression: IrInstanceInitializerCall) = expression.run {
IrDelegatingConstructorCallImpl(startOffset, endOffset, type, primary.symbol)
IrDelegatingConstructorCallImpl(
startOffset, endOffset, type,
primary.symbol,
valueArgumentsCount = primary.valueParameters.size,
typeArgumentsCount = primary.typeParameters.size
)
}
}
@@ -199,9 +199,11 @@ class PrivateMemberBodiesLowering(val context: JsIrBackendContext) : BodyLowerin
val newExpression = IrCallImpl(
expression.startOffset, expression.endOffset,
expression.type,
staticTarget.symbol, expression.typeArgumentsCount,
expression.origin,
expression.superQualifierSymbol
staticTarget.symbol,
typeArgumentsCount = expression.typeArgumentsCount,
valueArgumentsCount = expression.valueArgumentsCount + 1,
origin = expression.origin,
superQualifierSymbol = expression.superQualifierSymbol
)
newExpression.extensionReceiver = expression.extensionReceiver
@@ -8,6 +8,7 @@ package org.jetbrains.kotlin.ir.backend.js.lower
import org.jetbrains.kotlin.backend.common.CommonBackendContext
import org.jetbrains.kotlin.backend.common.FileLoweringPass
import org.jetbrains.kotlin.descriptors.ScriptDescriptor
import org.jetbrains.kotlin.ir.DescriptorBasedIr
import org.jetbrains.kotlin.ir.declarations.*
import org.jetbrains.kotlin.ir.expressions.*
import org.jetbrains.kotlin.ir.expressions.impl.IrConstImpl
@@ -36,6 +37,7 @@ class ScriptRemoveReceiverLowering(val context: CommonBackendContext) : FileLowe
private fun IrExpression.nullConst() = IrConstImpl.constNull(startOffset, endOffset, type.makeNullable())
@OptIn(DescriptorBasedIr::class)
fun lower(script: IrScript): List<IrScript> {
val transformer: IrElementTransformerVoid = object : IrElementTransformerVoid() {
override fun visitCall(expression: IrCall): IrExpression {
@@ -272,7 +272,11 @@ private class CallsiteRedirectionTransformer(private val context: JsIrBackendCon
private fun replaceSecondaryConstructorWithFactoryFunction(
call: IrFunctionAccessExpression,
newTarget: IrSimpleFunctionSymbol
) = IrCallImpl(call.startOffset, call.endOffset, call.type, newTarget, call.typeArgumentsCount).apply {
) = IrCallImpl(
call.startOffset, call.endOffset, call.type, newTarget,
typeArgumentsCount = call.typeArgumentsCount,
valueArgumentsCount = newTarget.owner.valueParameters.size
).apply {
copyTypeArgumentsFrom(call)
@@ -72,7 +72,11 @@ class ThrowableLowering(
val (messageArg, causeArg) = expression.extractThrowableArguments()
return expression.run {
IrCallImpl(startOffset, endOffset, type, newThrowableFunction).also {
IrCallImpl(
startOffset, endOffset, type, newThrowableFunction,
valueArgumentsCount = 2,
typeArgumentsCount = 0
).also {
it.putValueArgument(0, messageArg)
it.putValueArgument(1, causeArg)
}
@@ -89,7 +93,11 @@ class ThrowableLowering(
val thisReceiver = IrGetValueImpl(expression.startOffset, expression.endOffset, klass.thisReceiver!!.symbol)
return expression.run {
IrCallImpl(startOffset, endOffset, type, extendThrowableFunction).also {
IrCallImpl(
startOffset, endOffset, type, extendThrowableFunction,
valueArgumentsCount = 3,
typeArgumentsCount = 0
).also {
it.putValueArgument(0, thisReceiver)
it.putValueArgument(1, messageArg)
it.putValueArgument(2, causeArg)
@@ -6,6 +6,7 @@
package org.jetbrains.kotlin.ir.backend.js.lower
import org.jetbrains.kotlin.backend.common.BodyLoweringPass
import org.jetbrains.kotlin.ir.DescriptorBasedIr
import org.jetbrains.kotlin.ir.UNDEFINED_OFFSET
import org.jetbrains.kotlin.ir.backend.js.JsIrBackendContext
import org.jetbrains.kotlin.ir.declarations.IrDeclaration
@@ -30,6 +31,7 @@ private class VarargTransformer(
val context: JsIrBackendContext
) : IrElementTransformerVoid() {
@OptIn(DescriptorBasedIr::class)
private fun List<IrExpression>.toArrayLiteral(type: IrType, varargElementType: IrType): IrExpression {
// TODO: Use symbols when builtins symbol table is fixes
@@ -47,8 +49,15 @@ private class VarargTransformer(
val irVararg = IrVarargImpl(startOffset, endOffset, type, varargElementType, this)
return IrCallImpl(startOffset, endOffset, type, intrinsic).apply {
if (intrinsic.owner.typeParameters.isNotEmpty()) putTypeArgument(0, varargElementType)
return IrCallImpl(
startOffset, endOffset,
type, intrinsic,
typeArgumentsCount = if (intrinsic.owner.typeParameters.isNotEmpty()) 1 else 0,
valueArgumentsCount = 1
).apply {
if (typeArgumentsCount == 1) {
putTypeArgument(0, varargElementType)
}
putValueArgument(0, irVararg)
}
}
@@ -149,7 +158,9 @@ private class VarargTransformer(
expression.startOffset,
expression.endOffset,
arrayInfo.primitiveArrayType,
copyFunction
copyFunction,
typeArgumentsCount = 1,
valueArgumentsCount = 1
).apply {
putTypeArgument(0, arrayInfo.primitiveArrayType)
putValueArgument(0, segment)
@@ -175,7 +186,9 @@ private class VarargTransformer(
expression.startOffset,
expression.endOffset,
arrayInfo.primitiveArrayType,
concatFun
concatFun,
typeArgumentsCount = 0,
valueArgumentsCount = 1
).apply {
putValueArgument(0, arrayLiteral)
}
@@ -51,7 +51,9 @@ class EqualityAndComparisonCallsTransformer(context: JsIrBackendContext) : Calls
call.startOffset,
call.endOffset,
comparator.owner.returnType,
comparator
comparator,
typeArgumentsCount = 0,
valueArgumentsCount = 2
).apply {
putValueArgument(0, irCall(call, intrinsics.longCompareToLong, argumentsAsReceivers = true))
putValueArgument(1, JsIrBuilder.buildInt(irBuiltIns.intType, 0))
@@ -208,7 +208,9 @@ class NumberOperatorCallsTransformer(context: JsIrBackendContext) : CallsTransfo
call.startOffset,
call.endOffset,
intrinsics.longToDouble.owner.returnType,
intrinsics.longToDouble
intrinsics.longToDouble,
typeArgumentsCount = 0,
valueArgumentsCount = 0
).apply {
dispatchReceiver = arg
})
@@ -219,7 +221,9 @@ class NumberOperatorCallsTransformer(context: JsIrBackendContext) : CallsTransfo
call.startOffset,
call.endOffset,
intrinsics.longToFloat.owner.returnType,
intrinsics.longToFloat
intrinsics.longToFloat,
typeArgumentsCount = 0,
valueArgumentsCount = 0
).apply {
dispatchReceiver = arg
})
@@ -230,7 +234,9 @@ class NumberOperatorCallsTransformer(context: JsIrBackendContext) : CallsTransfo
call.startOffset,
call.endOffset,
intrinsics.jsNumberToLong.owner.returnType,
intrinsics.jsNumberToLong
intrinsics.jsNumberToLong,
typeArgumentsCount = 0,
valueArgumentsCount = 1
).apply {
putValueArgument(0, call.dispatchReceiver)
}
@@ -38,7 +38,9 @@ class PrimitiveContainerMemberCallTransformer(private val context: JsIrBackendCo
call.startOffset,
call.endOffset,
call.type,
context.intrinsics.primitiveToSizeConstructor[elementType]!!
context.intrinsics.primitiveToSizeConstructor[elementType]!!,
typeArgumentsCount = 0,
valueArgumentsCount = 1
).apply {
putValueArgument(0, call.getValueArgument(0))
}
@@ -6,7 +6,6 @@
package org.jetbrains.kotlin.ir.backend.js.utils
import org.jetbrains.kotlin.ir.IrElement
import org.jetbrains.kotlin.ir.IrStatement
import org.jetbrains.kotlin.ir.UNDEFINED_OFFSET
import org.jetbrains.kotlin.ir.backend.js.JsIrBackendContext
import org.jetbrains.kotlin.ir.declarations.*
@@ -37,7 +36,12 @@ fun IrDeclaration.hasStaticDispatch() = when (this) {
fun List<IrExpression>.toJsArrayLiteral(context: JsIrBackendContext, arrayType: IrType, elementType: IrType): IrExpression {
val irVararg = IrVarargImpl(UNDEFINED_OFFSET, UNDEFINED_OFFSET, arrayType, elementType, this)
return IrCallImpl(UNDEFINED_OFFSET, UNDEFINED_OFFSET, arrayType, context.intrinsics.arrayLiteral).apply {
return IrCallImpl(
UNDEFINED_OFFSET, UNDEFINED_OFFSET, arrayType,
context.intrinsics.arrayLiteral,
valueArgumentsCount = 1,
typeArgumentsCount = 0
).apply {
putValueArgument(0, irVararg)
}
}
@@ -276,7 +276,7 @@ private class AddContinuationLowering(private val context: JvmBackendContext) :
// TODO: fix the generic signature -- type parameters of FunctionN should be substituted
private fun IrClass.addInvokeCallingCreate(
create: IrFunction,
invokeSuspend: IrFunction,
invokeSuspend: IrSimpleFunction,
invokeToOverride: IrSimpleFunctionSymbol
) = addFunctionOverride(invokeToOverride.owner) { function ->
val newlyCreatedObject = irCall(create).also { createCall ->
@@ -292,7 +292,7 @@ private class AddContinuationLowering(private val context: JvmBackendContext) :
// versions; for other lambdas, there's no point in generating a non-overriding `create` separately.
private fun IrClass.addInvokeCallingConstructor(
constructor: IrFunction,
invokeSuspend: IrFunction,
invokeSuspend: IrSimpleFunction,
invokeToOverride: IrSimpleFunctionSymbol,
fieldsForBound: List<IrField>,
fieldsForUnbound: List<IrField>
@@ -334,7 +334,7 @@ private class AddContinuationLowering(private val context: JvmBackendContext) :
return irGet(result)
}
private fun IrBlockBodyBuilder.callInvokeSuspend(invokeSuspend: IrFunction, lambda: IrExpression): IrExpression {
private fun IrBlockBodyBuilder.callInvokeSuspend(invokeSuspend: IrSimpleFunction, lambda: IrExpression): IrExpression {
// SingletonReferencesLowering has finished a while ago, so `irUnit()` won't work anymore.
val unitClass = context.irBuiltIns.unitClass
val unitField = this@AddContinuationLowering.context.declarationFactory.getFieldForObjectInstance(unitClass.owner)
@@ -11,6 +11,7 @@ import org.jetbrains.kotlin.backend.js.JsDeclarationFactory
import org.jetbrains.kotlin.config.CompilerConfiguration
import org.jetbrains.kotlin.descriptors.ModuleDescriptor
import org.jetbrains.kotlin.descriptors.PackageFragmentDescriptor
import org.jetbrains.kotlin.ir.DescriptorBasedIr
import org.jetbrains.kotlin.ir.IrElement
import org.jetbrains.kotlin.ir.backend.js.JsCommonBackendContext
import org.jetbrains.kotlin.ir.backend.js.JsMapping
@@ -80,6 +81,7 @@ class WasmBackendContext(
}
class DescriptorlessExternalPackageFragmentSymbol : IrExternalPackageFragmentSymbol {
@DescriptorBasedIr
override val descriptor: PackageFragmentDescriptor
get() = error("Operation is unsupported")
@@ -19,6 +19,7 @@ package org.jetbrains.kotlin.psi2ir.generators
import org.jetbrains.kotlin.backend.common.CodegenUtil
import org.jetbrains.kotlin.builtins.KotlinBuiltIns
import org.jetbrains.kotlin.descriptors.*
import org.jetbrains.kotlin.ir.DescriptorBasedIr
import org.jetbrains.kotlin.ir.declarations.*
import org.jetbrains.kotlin.ir.declarations.impl.IrClassImpl
import org.jetbrains.kotlin.ir.descriptors.IrImplementingDelegateDescriptorImpl
@@ -55,6 +56,7 @@ import org.jetbrains.kotlin.types.TypeProjectionImpl
import org.jetbrains.kotlin.types.TypeSubstitutor
import org.jetbrains.kotlin.utils.newHashMapWithExpectedSize
@OptIn(DescriptorBasedIr::class)
class ClassGenerator(
declarationGenerator: DeclarationGenerator
) : DeclarationGeneratorExtension(declarationGenerator) {
@@ -174,7 +174,7 @@ abstract class DeclarationGeneratorExtension(val declarationGenerator: Declarati
inline fun <T : IrDeclaration> T.buildWithScope(builder: (T) -> Unit): T =
also { irDeclaration ->
context.symbolTable.withScope(irDeclaration.descriptor) {
context.symbolTable.withScope(irDeclaration) {
builder(irDeclaration)
}
}
@@ -39,7 +39,7 @@ class IrSyntheticDeclarationGenerator(context: GeneratorContext) : IrElementVisi
contributedDescriptors.removeAll(declaredDescriptors)
symbolTable.withScope(irClass.descriptor) {
symbolTable.withScope(irClass) {
contributedDescriptors.forEach { it.accept(descriptorGenerator, irClass) }
}
}
@@ -499,7 +499,7 @@ class OperatorExpressionGenerator(statementGenerator: StatementGenerator) : Stat
?: throw AssertionError("No type for !! argument")
val expressionType = argumentType.makeNotNullable()
val checkNotNull = context.irBuiltIns.checkNotNull
val checkNotNull = context.irBuiltIns.checkNotNullSymbol.descriptor
val checkNotNullSubstituted =
checkNotNull.substitute(
TypeSubstitutor.create(
@@ -78,7 +78,7 @@ class StandaloneDeclarationGenerator(private val context: GeneratorContext) {
val irClass = IrClassImpl(startOffset, endOffset, origin, symbol, descriptor)
symbolTable.withScope(descriptor) {
symbolTable.withScope(irClass) {
irClass.metadata = MetadataSource.Class(descriptor)
generateGlobalTypeParametersDeclarations(irClass, descriptor.declaredTypeParameters)
@@ -162,7 +162,7 @@ class StandaloneDeclarationGenerator(private val context: GeneratorContext) {
val irConstructor = IrConstructorImpl(startOffset, endOffset, origin, symbol, IrUninitializedType, descriptor)
irConstructor.metadata = MetadataSource.Function(descriptor)
symbolTable.withScope(descriptor) {
symbolTable.withScope(irConstructor) {
val ctorTypeParameters = descriptor.typeParameters.filter { it.containingDeclaration === descriptor }
generateScopedTypeParameterDeclarations(irConstructor, ctorTypeParameters)
generateValueParameterDeclarations(irConstructor, descriptor, defaultArgumentFactory)
-8
View File
@@ -13,12 +13,4 @@ dependencies {
sourceSets {
"main" { projectDefault() }
"test" {}
}
tasks {
val compileKotlin by existing(org.jetbrains.kotlin.gradle.tasks.KotlinCompile::class) {
kotlinOptions {
freeCompilerArgs += "-Xopt-in=org.jetbrains.kotlin.ir.DescriptorBasedIr"
}
}
}
@@ -14,6 +14,7 @@ import org.jetbrains.kotlin.ir.expressions.impl.*
import org.jetbrains.kotlin.ir.symbols.*
import org.jetbrains.kotlin.ir.types.IrType
import org.jetbrains.kotlin.ir.util.parentAsClass
import org.jetbrains.kotlin.ir.util.render
import org.jetbrains.kotlin.types.KotlinType
import org.jetbrains.kotlin.utils.addToStdlib.assertedCast
@@ -45,12 +46,6 @@ fun <T : IrElement> IrStatementsBuilder<T>.irTemporary(
return temporary
}
fun <T : IrElement> IrStatementsBuilder<T>.defineTemporary(value: IrExpression, nameHint: String? = null): VariableDescriptor {
val temporary = scope.createTemporaryVariable(value, nameHint)
+temporary
return temporary.descriptor
}
fun <T : IrElement> IrStatementsBuilder<T>.irTemporaryVarDeclaration(
type: IrType,
nameHint: String? = null,
@@ -72,12 +67,6 @@ fun <T : IrElement> IrStatementsBuilder<T>.irTemporaryVar(
}
fun <T : IrElement> IrStatementsBuilder<T>.defineTemporaryVar(value: IrExpression, nameHint: String? = null): VariableDescriptor {
val temporary = scope.createTemporaryVariable(value, nameHint, isMutable = true)
+temporary
return temporary.descriptor
}
fun IrBuilderWithScope.irExprBody(value: IrExpression) =
IrExpressionBodyImpl(startOffset, endOffset, value)
@@ -89,7 +78,7 @@ fun IrBuilderWithScope.irReturn(value: IrExpression) =
startOffset, endOffset,
context.irBuiltIns.nothingType,
scope.scopeOwnerSymbol.assertedCast<IrReturnTargetSymbol> {
"Function scope expected: ${scope.scopeOwner}"
"Function scope expected: ${scope.scopeOwnerSymbol.owner.render()}"
},
value
)
@@ -240,11 +229,29 @@ fun IrBuilderWithScope.irCallConstructor(callee: IrConstructorSymbol, typeArgume
}
}
fun IrBuilderWithScope.irCall(callee: IrSimpleFunctionSymbol, type: IrType): IrCall =
IrCallImpl(startOffset, endOffset, type, callee)
fun IrBuilderWithScope.irCall(
callee: IrSimpleFunctionSymbol,
type: IrType,
valueArgumentsCount: Int = callee.owner.valueParameters.size,
typeArgumentsCount: Int = callee.owner.typeParameters.size
): IrCall =
IrCallImpl(
startOffset, endOffset, type, callee,
typeArgumentsCount = typeArgumentsCount,
valueArgumentsCount = valueArgumentsCount
)
fun IrBuilderWithScope.irCall(callee: IrConstructorSymbol, type: IrType): IrConstructorCall =
IrConstructorCallImpl.fromSymbolDescriptor(startOffset, endOffset, type, callee)
fun IrBuilderWithScope.irCall(
callee: IrConstructorSymbol,
type: IrType,
constructedClass: IrClass = callee.owner.parentAsClass
): IrConstructorCall =
IrConstructorCallImpl(
startOffset, endOffset, type, callee,
valueArgumentsCount = callee.owner.valueParameters.size,
typeArgumentsCount = callee.owner.typeParameters.size + constructedClass.typeParameters.size,
constructorTypeArgumentsCount = callee.owner.typeParameters.size
)
fun IrBuilderWithScope.irCall(callee: IrFunctionSymbol, type: IrType): IrFunctionAccessExpression =
when (callee) {
@@ -263,7 +270,12 @@ fun IrBuilderWithScope.irCall(callee: IrFunctionSymbol): IrFunctionAccessExpress
irCall(callee, callee.owner.returnType)
fun IrBuilderWithScope.irCall(callee: IrFunctionSymbol, descriptor: FunctionDescriptor, type: IrType): IrCall =
IrCallImpl(startOffset, endOffset, type, callee as IrSimpleFunctionSymbol)
IrCallImpl(
startOffset, endOffset, type,
callee as IrSimpleFunctionSymbol,
valueArgumentsCount = callee.owner.valueParameters.size,
typeArgumentsCount = callee.owner.typeParameters.size
)
fun IrBuilderWithScope.irCall(callee: IrFunction): IrFunctionAccessExpression =
irCall(callee.symbol)
@@ -283,12 +295,12 @@ fun IrBuilderWithScope.irDelegatingConstructorCall(callee: IrConstructor): IrDel
)
fun IrBuilderWithScope.irCallOp(
callee: IrFunctionSymbol,
callee: IrSimpleFunctionSymbol,
type: IrType,
dispatchReceiver: IrExpression,
argument: IrExpression? = null
): IrMemberAccessExpression =
irCall(callee, type).apply {
irCall(callee, type, valueArgumentsCount = if (argument != null) 1 else 0, typeArgumentsCount = 0).apply {
this.dispatchReceiver = dispatchReceiver
if (argument != null)
putValueArgument(0, argument)
@@ -33,7 +33,12 @@ fun primitiveOp1(
origin: IrStatementOrigin,
dispatchReceiver: IrExpression
): IrExpression =
IrCallImpl(startOffset, endOffset, primitiveOpReturnType, primitiveOpSymbol, origin = origin).also {
IrCallImpl(
startOffset, endOffset, primitiveOpReturnType, primitiveOpSymbol,
typeArgumentsCount = 0,
valueArgumentsCount = 0,
origin = origin
).also {
it.dispatchReceiver = dispatchReceiver
}
@@ -47,7 +52,8 @@ fun primitiveOp2(
IrCallImpl(
startOffset, endOffset,
primitiveOpReturnType,
primitiveOpSymbol, typeArgumentsCount = 0,
primitiveOpSymbol,
typeArgumentsCount = 0,
valueArgumentsCount = 2,
origin = origin
).apply {
@@ -17,6 +17,7 @@
package org.jetbrains.kotlin.ir.builders
import org.jetbrains.kotlin.descriptors.*
import org.jetbrains.kotlin.ir.DescriptorBasedIr
import org.jetbrains.kotlin.ir.UNDEFINED_OFFSET
import org.jetbrains.kotlin.ir.declarations.IrDeclaration
import org.jetbrains.kotlin.ir.declarations.IrDeclarationOrigin
@@ -34,7 +35,9 @@ import org.jetbrains.kotlin.ir.types.toKotlinType
import org.jetbrains.kotlin.name.Name
import org.jetbrains.kotlin.types.KotlinType
@OptIn(DescriptorBasedIr::class)
class Scope(val scopeOwnerSymbol: IrSymbol) {
@DescriptorBasedIr
val scopeOwner: DeclarationDescriptor get() = scopeOwnerSymbol.descriptor
fun getLocalDeclarationParent(): IrDeclarationParent {
@@ -1,36 +0,0 @@
/*
* Copyright 2010-2016 JetBrains s.r.o.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.jetbrains.kotlin.ir.builders
import org.jetbrains.kotlin.descriptors.ClassDescriptor
import org.jetbrains.kotlin.descriptors.FunctionDescriptor
import org.jetbrains.kotlin.descriptors.MemberDescriptor
inline fun <reified T> Scope.assertCastOwner() =
scopeOwner as? T ?: throw AssertionError("Unexpected scopeOwner: $scopeOwner")
fun Scope.functionOwner(): FunctionDescriptor =
assertCastOwner()
fun Scope.classOwner(): ClassDescriptor =
scopeOwner.let {
when (it) {
is ClassDescriptor -> it
is MemberDescriptor -> it.containingDeclaration as ClassDescriptor
else -> throw AssertionError("Unexpected scopeOwner: $scopeOwner")
}
}
@@ -17,10 +17,12 @@
package org.jetbrains.kotlin.ir.declarations
import org.jetbrains.kotlin.descriptors.ClassDescriptor
import org.jetbrains.kotlin.ir.DescriptorBasedIr
import org.jetbrains.kotlin.ir.expressions.IrBlockBody
import org.jetbrains.kotlin.ir.symbols.IrAnonymousInitializerSymbol
interface IrAnonymousInitializer : IrSymbolDeclaration<IrAnonymousInitializerSymbol> {
@DescriptorBasedIr
override val descriptor: ClassDescriptor // TODO special descriptor for anonymous initializer blocks
val isStatic: Boolean
@@ -16,6 +16,7 @@
package org.jetbrains.kotlin.ir.declarations
import org.jetbrains.kotlin.ir.DescriptorBasedIr
import org.jetbrains.kotlin.descriptors.*
import org.jetbrains.kotlin.ir.symbols.IrClassSymbol
import org.jetbrains.kotlin.ir.types.IrType
@@ -24,6 +25,7 @@ interface IrClass :
IrSymbolDeclaration<IrClassSymbol>, IrDeclarationWithName, IrDeclarationWithVisibility,
IrDeclarationContainer, IrTypeParametersContainer, IrAttributeContainer {
@DescriptorBasedIr
override val descriptor: ClassDescriptor
override var visibility: Visibility
@@ -18,10 +18,12 @@ package org.jetbrains.kotlin.ir.declarations
import org.jetbrains.kotlin.descriptors.ClassConstructorDescriptor
import org.jetbrains.kotlin.descriptors.Visibility
import org.jetbrains.kotlin.ir.DescriptorBasedIr
import org.jetbrains.kotlin.ir.symbols.IrConstructorSymbol
interface IrConstructor : IrFunction, IrSymbolDeclaration<IrConstructorSymbol> {
@DescriptorBasedIr
override val descriptor: ClassConstructorDescriptor
override var visibility: Visibility
@@ -17,10 +17,12 @@
package org.jetbrains.kotlin.ir.declarations
import org.jetbrains.kotlin.descriptors.ClassDescriptor
import org.jetbrains.kotlin.ir.DescriptorBasedIr
import org.jetbrains.kotlin.ir.expressions.IrExpressionBody
import org.jetbrains.kotlin.ir.symbols.IrEnumEntrySymbol
interface IrEnumEntry : IrSymbolDeclaration<IrEnumEntrySymbol>, IrDeclarationWithName {
@DescriptorBasedIr
override val descriptor: ClassDescriptor
var correspondingClass: IrClass?
@@ -6,6 +6,7 @@
package org.jetbrains.kotlin.ir.declarations
import org.jetbrains.kotlin.descriptors.PropertyDescriptor
import org.jetbrains.kotlin.ir.DescriptorBasedIr
import org.jetbrains.kotlin.ir.expressions.IrExpressionBody
import org.jetbrains.kotlin.ir.symbols.IrFieldSymbol
import org.jetbrains.kotlin.ir.symbols.IrPropertySymbol
@@ -15,6 +16,7 @@ interface IrField :
IrSymbolDeclaration<IrFieldSymbol>, IrOverridableDeclaration<IrFieldSymbol>,
IrDeclarationWithName, IrDeclarationWithVisibility, IrDeclarationParent {
@DescriptorBasedIr
override val descriptor: PropertyDescriptor
val type: IrType
@@ -18,6 +18,7 @@ package org.jetbrains.kotlin.ir.declarations
import org.jetbrains.kotlin.descriptors.FunctionDescriptor
import org.jetbrains.kotlin.descriptors.ValueParameterDescriptor
import org.jetbrains.kotlin.ir.DescriptorBasedIr
import org.jetbrains.kotlin.ir.expressions.IrBody
import org.jetbrains.kotlin.ir.expressions.IrExpressionBody
import org.jetbrains.kotlin.ir.symbols.IrFunctionSymbol
@@ -26,6 +27,7 @@ import org.jetbrains.kotlin.ir.types.IrType
interface IrFunction :
IrDeclarationWithName, IrDeclarationWithVisibility, IrTypeParametersContainer, IrSymbolOwner, IrDeclarationParent, IrReturnTarget {
@DescriptorBasedIr
override val descriptor: FunctionDescriptor
override val symbol: IrFunctionSymbol
@@ -44,7 +46,7 @@ interface IrFunction :
override val metadata: MetadataSource?
}
@DescriptorBasedIr
fun IrFunction.getIrValueParameter(parameter: ValueParameterDescriptor): IrValueParameter =
valueParameters.getOrElse(parameter.index) {
throw AssertionError("No IrValueParameter for $parameter")
@@ -54,9 +56,7 @@ fun IrFunction.getIrValueParameter(parameter: ValueParameterDescriptor): IrValue
}
}
fun IrFunction.getDefault(parameter: ValueParameterDescriptor): IrExpressionBody? =
getIrValueParameter(parameter).defaultValue
@DescriptorBasedIr
fun IrFunction.putDefault(parameter: ValueParameterDescriptor, expressionBody: IrExpressionBody) {
getIrValueParameter(parameter).defaultValue = expressionBody
}
@@ -17,6 +17,7 @@
package org.jetbrains.kotlin.ir.declarations
import org.jetbrains.kotlin.descriptors.VariableDescriptorWithAccessors
import org.jetbrains.kotlin.ir.DescriptorBasedIr
import org.jetbrains.kotlin.ir.symbols.IrLocalDelegatedPropertySymbol
import org.jetbrains.kotlin.ir.symbols.IrSymbol
import org.jetbrains.kotlin.ir.types.IrType
@@ -25,6 +26,7 @@ interface IrLocalDelegatedProperty :
IrDeclarationWithName,
IrSymbolOwner {
@DescriptorBasedIr
override val descriptor: VariableDescriptorWithAccessors
override val symbol: IrLocalDelegatedPropertySymbol
@@ -18,6 +18,7 @@ package org.jetbrains.kotlin.ir.declarations
import org.jetbrains.kotlin.descriptors.Modality
import org.jetbrains.kotlin.descriptors.PropertyDescriptor
import org.jetbrains.kotlin.ir.DescriptorBasedIr
import org.jetbrains.kotlin.ir.symbols.IrPropertySymbol
import org.jetbrains.kotlin.ir.symbols.IrSimpleFunctionSymbol
@@ -27,6 +28,7 @@ interface IrProperty :
IrOverridableMember,
IrSymbolOwner {
@DescriptorBasedIr
override val descriptor: PropertyDescriptor
override val symbol: IrPropertySymbol
@@ -6,9 +6,12 @@
package org.jetbrains.kotlin.ir.declarations
import org.jetbrains.kotlin.descriptors.FunctionDescriptor
import org.jetbrains.kotlin.ir.DescriptorBasedIr
import org.jetbrains.kotlin.ir.symbols.IrReturnTargetSymbol
interface IrReturnTarget : IrSymbolOwner {
@DescriptorBasedIr
val descriptor: FunctionDescriptor
override val symbol: IrReturnTargetSymbol
}
@@ -6,6 +6,7 @@
package org.jetbrains.kotlin.ir.declarations
import org.jetbrains.kotlin.descriptors.TypeAliasDescriptor
import org.jetbrains.kotlin.ir.DescriptorBasedIr
import org.jetbrains.kotlin.ir.symbols.IrTypeAliasSymbol
import org.jetbrains.kotlin.ir.types.IrType
@@ -15,7 +16,9 @@ interface IrTypeAlias :
IrDeclarationWithVisibility,
IrTypeParametersContainer {
@DescriptorBasedIr
override val descriptor: TypeAliasDescriptor
val isActual: Boolean
val expandedType: IrType
}
@@ -17,12 +17,14 @@
package org.jetbrains.kotlin.ir.declarations
import org.jetbrains.kotlin.descriptors.TypeParameterDescriptor
import org.jetbrains.kotlin.ir.DescriptorBasedIr
import org.jetbrains.kotlin.ir.symbols.IrTypeParameterSymbol
import org.jetbrains.kotlin.ir.types.IrType
import org.jetbrains.kotlin.ir.visitors.IrElementTransformer
import org.jetbrains.kotlin.types.Variance
interface IrTypeParameter : IrSymbolDeclaration<IrTypeParameterSymbol>, IrDeclarationWithName {
@DescriptorBasedIr
override val descriptor: TypeParameterDescriptor
val variance: Variance
@@ -6,12 +6,14 @@
package org.jetbrains.kotlin.ir.declarations
import org.jetbrains.kotlin.descriptors.ValueDescriptor
import org.jetbrains.kotlin.ir.DescriptorBasedIr
import org.jetbrains.kotlin.ir.symbols.IrValueSymbol
import org.jetbrains.kotlin.ir.types.IrType
interface IrValueDeclaration : IrDeclarationWithName, IrSymbolOwner {
@DescriptorBasedIr
override val descriptor: ValueDescriptor
override val symbol: IrValueSymbol
override val symbol: IrValueSymbol
val type: IrType
}
@@ -17,12 +17,14 @@
package org.jetbrains.kotlin.ir.declarations
import org.jetbrains.kotlin.descriptors.ParameterDescriptor
import org.jetbrains.kotlin.ir.DescriptorBasedIr
import org.jetbrains.kotlin.ir.expressions.IrExpressionBody
import org.jetbrains.kotlin.ir.symbols.IrValueParameterSymbol
import org.jetbrains.kotlin.ir.types.IrType
import org.jetbrains.kotlin.ir.visitors.IrElementTransformer
interface IrValueParameter : IrValueDeclaration, IrSymbolDeclaration<IrValueParameterSymbol> {
@DescriptorBasedIr
override val descriptor: ParameterDescriptor
val index: Int
@@ -17,10 +17,12 @@
package org.jetbrains.kotlin.ir.declarations
import org.jetbrains.kotlin.descriptors.VariableDescriptor
import org.jetbrains.kotlin.ir.DescriptorBasedIr
import org.jetbrains.kotlin.ir.expressions.IrExpression
import org.jetbrains.kotlin.ir.symbols.IrVariableSymbol
interface IrVariable : IrValueDeclaration, IrSymbolDeclaration<IrVariableSymbol> {
@DescriptorBasedIr
override val descriptor: VariableDescriptor
val isVar: Boolean
@@ -17,6 +17,7 @@
package org.jetbrains.kotlin.ir.declarations.impl
import org.jetbrains.kotlin.descriptors.ClassDescriptor
import org.jetbrains.kotlin.ir.DescriptorBasedIr
import org.jetbrains.kotlin.ir.declarations.IrAnonymousInitializer
import org.jetbrains.kotlin.ir.declarations.IrDeclarationOrigin
import org.jetbrains.kotlin.ir.declarations.impl.carriers.AnonymousInitializerCarrier
@@ -39,6 +40,7 @@ class IrAnonymousInitializerImpl(
symbol.bind(this)
}
@DescriptorBasedIr
override val descriptor: ClassDescriptor get() = symbol.descriptor
override var bodyField: IrBlockBody? = null
@@ -17,6 +17,7 @@
package org.jetbrains.kotlin.ir.declarations.impl
import org.jetbrains.kotlin.descriptors.*
import org.jetbrains.kotlin.ir.DescriptorBasedIr
import org.jetbrains.kotlin.ir.declarations.*
import org.jetbrains.kotlin.ir.declarations.impl.carriers.ClassCarrier
import org.jetbrains.kotlin.ir.symbols.IrClassSymbol
@@ -76,6 +77,7 @@ class IrClassImpl(
symbol.bind(this)
}
@DescriptorBasedIr
override val descriptor: ClassDescriptor get() = symbol.descriptor
override var visibilityField: Visibility = visibility
@@ -18,6 +18,7 @@ package org.jetbrains.kotlin.ir.declarations.impl
import org.jetbrains.kotlin.descriptors.ClassConstructorDescriptor
import org.jetbrains.kotlin.descriptors.Visibility
import org.jetbrains.kotlin.ir.DescriptorBasedIr
import org.jetbrains.kotlin.ir.declarations.*
import org.jetbrains.kotlin.ir.declarations.impl.carriers.ConstructorCarrier
import org.jetbrains.kotlin.ir.symbols.IrConstructorSymbol
@@ -70,6 +71,7 @@ class IrConstructorImpl(
symbol.bind(this)
}
@DescriptorBasedIr
override val descriptor: ClassConstructorDescriptor get() = symbol.descriptor
override fun <R, D> accept(visitor: IrElementVisitor<R, D>, data: D): R =
@@ -17,6 +17,7 @@
package org.jetbrains.kotlin.ir.declarations.impl
import org.jetbrains.kotlin.descriptors.ClassDescriptor
import org.jetbrains.kotlin.ir.DescriptorBasedIr
import org.jetbrains.kotlin.ir.declarations.IrClass
import org.jetbrains.kotlin.ir.declarations.IrDeclarationOrigin
import org.jetbrains.kotlin.ir.declarations.IrEnumEntry
@@ -42,6 +43,7 @@ class IrEnumEntryImpl(
symbol.bind(this)
}
@DescriptorBasedIr
override val descriptor: ClassDescriptor get() = symbol.descriptor
override var correspondingClassField: IrClass? = null
@@ -17,12 +17,14 @@
package org.jetbrains.kotlin.ir.declarations.impl
import org.jetbrains.kotlin.descriptors.DeclarationDescriptor
import org.jetbrains.kotlin.ir.DescriptorBasedIr
import org.jetbrains.kotlin.ir.declarations.IrDeclarationOrigin
import org.jetbrains.kotlin.ir.declarations.IrErrorDeclaration
import org.jetbrains.kotlin.ir.declarations.impl.carriers.ErrorCarrier
import org.jetbrains.kotlin.ir.visitors.IrElementTransformer
import org.jetbrains.kotlin.ir.visitors.IrElementVisitor
@OptIn(DescriptorBasedIr::class)
class IrErrorDeclarationImpl(
startOffset: Int,
endOffset: Int,
@@ -19,6 +19,7 @@ package org.jetbrains.kotlin.ir.declarations.impl
import org.jetbrains.kotlin.descriptors.ModuleDescriptor
import org.jetbrains.kotlin.descriptors.PackageFragmentDescriptor
import org.jetbrains.kotlin.descriptors.impl.EmptyPackageFragmentDescriptor
import org.jetbrains.kotlin.ir.DescriptorBasedIr
import org.jetbrains.kotlin.ir.IrElementBase
import org.jetbrains.kotlin.ir.UNDEFINED_OFFSET
import org.jetbrains.kotlin.ir.declarations.IrDeclaration
@@ -40,10 +41,12 @@ class IrExternalPackageFragmentImpl(
symbol.bind(this)
}
@DescriptorBasedIr
override val packageFragmentDescriptor: PackageFragmentDescriptor get() = symbol.descriptor
override val declarations: MutableList<IrDeclaration> = ArrayList()
@OptIn(DescriptorBasedIr::class)
override val containerSource get() = (symbol.descriptor as? DeserializedMemberDescriptor)?.containerSource
override fun <R, D> accept(visitor: IrElementVisitor<R, D>, data: D): R =
@@ -18,6 +18,7 @@ package org.jetbrains.kotlin.ir.declarations.impl
import org.jetbrains.kotlin.descriptors.PropertyDescriptor
import org.jetbrains.kotlin.descriptors.Visibility
import org.jetbrains.kotlin.ir.DescriptorBasedIr
import org.jetbrains.kotlin.ir.declarations.*
import org.jetbrains.kotlin.ir.declarations.impl.carriers.FieldCarrier
import org.jetbrains.kotlin.ir.expressions.IrExpressionBody
@@ -69,6 +70,7 @@ class IrFieldImpl(
symbol.bind(this)
}
@DescriptorBasedIr
override val descriptor: PropertyDescriptor = symbol.descriptor
override var initializerField: IrExpressionBody? = null
@@ -17,6 +17,7 @@
package org.jetbrains.kotlin.ir.declarations.impl
import org.jetbrains.kotlin.descriptors.PackageFragmentDescriptor
import org.jetbrains.kotlin.ir.DescriptorBasedIr
import org.jetbrains.kotlin.ir.IrElementBase
import org.jetbrains.kotlin.ir.SourceManager
import org.jetbrains.kotlin.ir.declarations.*
@@ -44,6 +45,7 @@ class IrFileImpl(
symbol.bind(this)
}
@DescriptorBasedIr
override val packageFragmentDescriptor: PackageFragmentDescriptor get() = symbol.descriptor
override val declarations: MutableList<IrDeclaration> = ArrayList()
@@ -8,6 +8,7 @@ package org.jetbrains.kotlin.ir.declarations.impl
import org.jetbrains.kotlin.descriptors.FunctionDescriptor
import org.jetbrains.kotlin.descriptors.Modality
import org.jetbrains.kotlin.descriptors.Visibility
import org.jetbrains.kotlin.ir.DescriptorBasedIr
import org.jetbrains.kotlin.ir.declarations.*
import org.jetbrains.kotlin.ir.declarations.impl.carriers.FunctionCarrier
import org.jetbrains.kotlin.ir.descriptors.WrappedSimpleFunctionDescriptor
@@ -38,6 +39,7 @@ abstract class IrFunctionCommonImpl(
IrSimpleFunction,
FunctionCarrier {
@DescriptorBasedIr
abstract override val descriptor: FunctionDescriptor
override var overriddenSymbolsField: List<IrSimpleFunctionSymbol> = emptyList()
@@ -127,6 +129,7 @@ class IrFunctionImpl(
IrSimpleFunctionSymbolImpl(descriptor), returnType, descriptor
)
@DescriptorBasedIr
override val descriptor: FunctionDescriptor get() = symbol.descriptor
init {
@@ -160,9 +163,11 @@ class IrFakeOverrideFunctionImpl(
override val symbol: IrSimpleFunctionSymbol
get() = _symbol ?: error("$this has not acquired a symbol yet")
override val descriptor get() =
_symbol?.descriptor ?: WrappedSimpleFunctionDescriptor()
@DescriptorBasedIr
override val descriptor
get() = _symbol?.descriptor ?: WrappedSimpleFunctionDescriptor()
@OptIn(DescriptorBasedIr::class)
fun acquireSymbol(symbol: IrSimpleFunctionSymbol) {
assert(_symbol == null) { "$this already has symbol _symbol" }
_symbol = symbol
@@ -17,6 +17,7 @@
package org.jetbrains.kotlin.ir.declarations.impl
import org.jetbrains.kotlin.descriptors.VariableDescriptorWithAccessors
import org.jetbrains.kotlin.ir.DescriptorBasedIr
import org.jetbrains.kotlin.ir.declarations.*
import org.jetbrains.kotlin.ir.declarations.impl.carriers.LocalDelegatedPropertyCarrier
import org.jetbrains.kotlin.ir.symbols.IrLocalDelegatedPropertySymbol
@@ -44,6 +45,7 @@ class IrLocalDelegatedPropertyImpl(
symbol.bind(this)
}
@DescriptorBasedIr
override val descriptor: VariableDescriptorWithAccessors
get() = symbol.descriptor
@@ -20,6 +20,7 @@ import org.jetbrains.kotlin.descriptors.FunctionDescriptor
import org.jetbrains.kotlin.descriptors.Modality
import org.jetbrains.kotlin.descriptors.PropertyDescriptor
import org.jetbrains.kotlin.descriptors.Visibility
import org.jetbrains.kotlin.ir.DescriptorBasedIr
import org.jetbrains.kotlin.ir.declarations.*
import org.jetbrains.kotlin.ir.declarations.impl.carriers.PropertyCarrier
import org.jetbrains.kotlin.ir.descriptors.WrappedPropertyDescriptor
@@ -49,6 +50,7 @@ abstract class IrPropertyCommonImpl(
IrProperty,
PropertyCarrier {
@DescriptorBasedIr
abstract override val descriptor: PropertyDescriptor
override var backingFieldField: IrField? = null
@@ -214,6 +216,8 @@ class IrPropertyImpl(
init {
symbol.bind(this)
}
@DescriptorBasedIr
override val descriptor: PropertyDescriptor = symbol.descriptor
}
@@ -238,9 +242,11 @@ class IrFakeOverridePropertyImpl(
override val symbol: IrPropertySymbol
get() = _symbol ?: error("$this has not acquired a symbol yet")
override val descriptor get() =
_symbol?.descriptor ?: WrappedPropertyDescriptor()
@DescriptorBasedIr
override val descriptor
get() = _symbol?.descriptor ?: WrappedPropertyDescriptor()
@OptIn(DescriptorBasedIr::class)
fun acquireSymbol(symbol: IrPropertySymbol) {
assert(_symbol == null) { "$this already has symbol _symbol" }
_symbol = symbol
@@ -6,6 +6,7 @@
package org.jetbrains.kotlin.ir.declarations.impl
import org.jetbrains.kotlin.descriptors.ScriptDescriptor
import org.jetbrains.kotlin.ir.DescriptorBasedIr
import org.jetbrains.kotlin.ir.IrStatement
import org.jetbrains.kotlin.ir.UNDEFINED_OFFSET
import org.jetbrains.kotlin.ir.declarations.*
@@ -42,6 +43,8 @@ class IrScriptImpl(
override val statements: MutableList<IrStatement> = mutableListOf()
override lateinit var thisReceiver: IrValueParameter
@DescriptorBasedIr
override val descriptor: ScriptDescriptor = symbol.descriptor
init {
@@ -7,6 +7,7 @@ package org.jetbrains.kotlin.ir.declarations.impl
import org.jetbrains.kotlin.descriptors.TypeAliasDescriptor
import org.jetbrains.kotlin.descriptors.Visibility
import org.jetbrains.kotlin.ir.DescriptorBasedIr
import org.jetbrains.kotlin.ir.declarations.IrDeclarationOrigin
import org.jetbrains.kotlin.ir.declarations.IrTypeAlias
import org.jetbrains.kotlin.ir.declarations.IrTypeParameter
@@ -36,6 +37,7 @@ class IrTypeAliasImpl(
symbol.bind(this)
}
@DescriptorBasedIr
override val descriptor: TypeAliasDescriptor
get() = symbol.descriptor
@@ -17,6 +17,7 @@
package org.jetbrains.kotlin.ir.declarations.impl
import org.jetbrains.kotlin.descriptors.TypeParameterDescriptor
import org.jetbrains.kotlin.ir.DescriptorBasedIr
import org.jetbrains.kotlin.ir.declarations.IrDeclarationOrigin
import org.jetbrains.kotlin.ir.declarations.IrTypeParameter
import org.jetbrains.kotlin.ir.declarations.impl.carriers.TypeParameterCarrier
@@ -60,6 +61,7 @@ class IrTypeParameterImpl(
symbol.bind(this)
}
@DescriptorBasedIr
override val descriptor: TypeParameterDescriptor get() = symbol.descriptor
override val superTypes: MutableList<IrType> = SmartList()
@@ -18,6 +18,7 @@ package org.jetbrains.kotlin.ir.declarations.impl
import org.jetbrains.kotlin.descriptors.ParameterDescriptor
import org.jetbrains.kotlin.descriptors.ValueParameterDescriptor
import org.jetbrains.kotlin.ir.DescriptorBasedIr
import org.jetbrains.kotlin.ir.declarations.IrDeclarationOrigin
import org.jetbrains.kotlin.ir.declarations.IrValueParameter
import org.jetbrains.kotlin.ir.declarations.impl.carriers.ValueParameterCarrier
@@ -46,6 +47,7 @@ class IrValueParameterImpl(
IrValueParameter,
ValueParameterCarrier {
@DescriptorBasedIr
constructor(
startOffset: Int,
endOffset: Int,
@@ -64,6 +66,7 @@ class IrValueParameterImpl(
isNoinline = descriptor.safeAs<ValueParameterDescriptor>()?.isNoinline ?: false
)
@DescriptorBasedIr
override val descriptor: ParameterDescriptor = symbol.descriptor
init {
@@ -17,6 +17,7 @@
package org.jetbrains.kotlin.ir.declarations.impl
import org.jetbrains.kotlin.descriptors.VariableDescriptor
import org.jetbrains.kotlin.ir.DescriptorBasedIr
import org.jetbrains.kotlin.ir.declarations.IrDeclarationOrigin
import org.jetbrains.kotlin.ir.declarations.IrDeclarationParent
import org.jetbrains.kotlin.ir.declarations.IrVariable
@@ -84,6 +85,7 @@ class IrVariableImpl(
symbol.bind(this)
}
@DescriptorBasedIr
override val descriptor: VariableDescriptor get() = symbol.descriptor
override var initializer: IrExpression? = null
@@ -6,6 +6,7 @@
package org.jetbrains.kotlin.ir.declarations.lazy
import org.jetbrains.kotlin.descriptors.*
import org.jetbrains.kotlin.ir.DescriptorBasedIr
import org.jetbrains.kotlin.ir.declarations.*
import org.jetbrains.kotlin.ir.symbols.IrClassSymbol
import org.jetbrains.kotlin.ir.types.IrType
@@ -20,6 +21,7 @@ import org.jetbrains.kotlin.metadata.deserialization.NameResolver
import org.jetbrains.kotlin.name.Name
import org.jetbrains.kotlin.serialization.deserialization.descriptors.DeserializedClassDescriptor
@OptIn(DescriptorBasedIr::class)
class IrLazyClass(
startOffset: Int,
endOffset: Int,
@@ -7,6 +7,7 @@ package org.jetbrains.kotlin.ir.declarations.lazy
import org.jetbrains.kotlin.descriptors.ClassConstructorDescriptor
import org.jetbrains.kotlin.descriptors.Visibility
import org.jetbrains.kotlin.ir.DescriptorBasedIr
import org.jetbrains.kotlin.ir.declarations.IrConstructor
import org.jetbrains.kotlin.ir.declarations.IrDeclarationOrigin
import org.jetbrains.kotlin.ir.declarations.IrTypeParameter
@@ -17,6 +18,7 @@ import org.jetbrains.kotlin.ir.util.withScope
import org.jetbrains.kotlin.ir.visitors.IrElementVisitor
import org.jetbrains.kotlin.name.Name
@OptIn(DescriptorBasedIr::class)
class IrLazyConstructor(
startOffset: Int,
endOffset: Int,
@@ -6,6 +6,7 @@
package org.jetbrains.kotlin.ir.declarations.lazy
import org.jetbrains.kotlin.descriptors.*
import org.jetbrains.kotlin.ir.DescriptorBasedIr
import org.jetbrains.kotlin.ir.IrElementBase
import org.jetbrains.kotlin.ir.UNDEFINED_OFFSET
import org.jetbrains.kotlin.ir.declarations.*
@@ -16,6 +17,7 @@ import org.jetbrains.kotlin.ir.util.TypeTranslator
import org.jetbrains.kotlin.resolve.scopes.MemberScope
import org.jetbrains.kotlin.types.KotlinType
@OptIn(DescriptorBasedIr::class)
abstract class IrLazyDeclarationBase(
startOffset: Int,
endOffset: Int,
@@ -17,6 +17,7 @@
package org.jetbrains.kotlin.ir.declarations.lazy
import org.jetbrains.kotlin.descriptors.ClassDescriptor
import org.jetbrains.kotlin.ir.DescriptorBasedIr
import org.jetbrains.kotlin.ir.declarations.IrClass
import org.jetbrains.kotlin.ir.declarations.IrDeclarationOrigin
import org.jetbrains.kotlin.ir.declarations.IrEnumEntry
@@ -28,6 +29,7 @@ import org.jetbrains.kotlin.ir.visitors.IrElementTransformer
import org.jetbrains.kotlin.ir.visitors.IrElementVisitor
import org.jetbrains.kotlin.name.Name
@OptIn(DescriptorBasedIr::class)
class IrLazyEnumEntryImpl(
startOffset: Int,
endOffset: Int,
@@ -7,6 +7,7 @@ package org.jetbrains.kotlin.ir.declarations.lazy
import org.jetbrains.kotlin.descriptors.PropertyDescriptor
import org.jetbrains.kotlin.descriptors.Visibility
import org.jetbrains.kotlin.ir.DescriptorBasedIr
import org.jetbrains.kotlin.ir.UNDEFINED_OFFSET
import org.jetbrains.kotlin.ir.declarations.IrDeclarationOrigin
import org.jetbrains.kotlin.ir.declarations.IrField
@@ -22,6 +23,7 @@ import org.jetbrains.kotlin.ir.visitors.IrElementTransformer
import org.jetbrains.kotlin.ir.visitors.IrElementVisitor
import org.jetbrains.kotlin.name.Name
@OptIn(DescriptorBasedIr::class)
class IrLazyField(
startOffset: Int,
endOffset: Int,
@@ -8,6 +8,7 @@ package org.jetbrains.kotlin.ir.declarations.lazy
import org.jetbrains.kotlin.descriptors.FunctionDescriptor
import org.jetbrains.kotlin.descriptors.Modality
import org.jetbrains.kotlin.descriptors.Visibility
import org.jetbrains.kotlin.ir.DescriptorBasedIr
import org.jetbrains.kotlin.ir.declarations.*
import org.jetbrains.kotlin.ir.symbols.IrPropertySymbol
import org.jetbrains.kotlin.ir.symbols.IrSimpleFunctionSymbol
@@ -18,6 +19,7 @@ import org.jetbrains.kotlin.ir.visitors.IrElementVisitor
import org.jetbrains.kotlin.name.Name
import org.jetbrains.kotlin.resolve.descriptorUtil.propertyIfAccessor
@OptIn(DescriptorBasedIr::class)
class IrLazyFunction(
startOffset: Int,
endOffset: Int,
@@ -6,6 +6,7 @@
package org.jetbrains.kotlin.ir.declarations.lazy
import org.jetbrains.kotlin.descriptors.Visibility
import org.jetbrains.kotlin.ir.DescriptorBasedIr
import org.jetbrains.kotlin.ir.declarations.IrDeclarationOrigin
import org.jetbrains.kotlin.ir.declarations.IrFunction
import org.jetbrains.kotlin.ir.declarations.IrValueParameter
@@ -18,6 +19,7 @@ import org.jetbrains.kotlin.ir.visitors.IrElementTransformer
import org.jetbrains.kotlin.ir.visitors.IrElementVisitor
import org.jetbrains.kotlin.name.Name
@OptIn(DescriptorBasedIr::class)
abstract class IrLazyFunctionBase(
startOffset: Int,
endOffset: Int,
@@ -8,6 +8,7 @@ package org.jetbrains.kotlin.ir.declarations.lazy
import org.jetbrains.kotlin.descriptors.Modality
import org.jetbrains.kotlin.descriptors.PropertyDescriptor
import org.jetbrains.kotlin.descriptors.Visibility
import org.jetbrains.kotlin.ir.DescriptorBasedIr
import org.jetbrains.kotlin.ir.declarations.IrDeclarationOrigin
import org.jetbrains.kotlin.ir.declarations.IrField
import org.jetbrains.kotlin.ir.declarations.IrProperty
@@ -21,6 +22,7 @@ import org.jetbrains.kotlin.name.Name
import org.jetbrains.kotlin.resolve.BindingContext
import org.jetbrains.kotlin.resolve.hasBackingField
@OptIn(DescriptorBasedIr::class)
class IrLazyProperty(
startOffset: Int,
endOffset: Int,
@@ -7,6 +7,7 @@ package org.jetbrains.kotlin.ir.declarations.lazy
import org.jetbrains.kotlin.descriptors.TypeAliasDescriptor
import org.jetbrains.kotlin.descriptors.Visibility
import org.jetbrains.kotlin.ir.DescriptorBasedIr
import org.jetbrains.kotlin.ir.declarations.IrDeclarationOrigin
import org.jetbrains.kotlin.ir.declarations.IrTypeAlias
import org.jetbrains.kotlin.ir.declarations.IrTypeParameter
@@ -20,6 +21,7 @@ import org.jetbrains.kotlin.ir.visitors.IrElementTransformer
import org.jetbrains.kotlin.ir.visitors.IrElementVisitor
import org.jetbrains.kotlin.name.Name
@OptIn(DescriptorBasedIr::class)
class IrLazyTypeAlias(
startOffset: Int,
endOffset: Int,
@@ -6,6 +6,7 @@
package org.jetbrains.kotlin.ir.declarations.lazy
import org.jetbrains.kotlin.descriptors.TypeParameterDescriptor
import org.jetbrains.kotlin.ir.DescriptorBasedIr
import org.jetbrains.kotlin.ir.declarations.IrDeclarationOrigin
import org.jetbrains.kotlin.ir.declarations.IrTypeParameter
import org.jetbrains.kotlin.ir.declarations.IrTypeParametersContainer
@@ -19,6 +20,7 @@ import org.jetbrains.kotlin.ir.visitors.IrElementVisitor
import org.jetbrains.kotlin.name.Name
import org.jetbrains.kotlin.types.Variance
@OptIn(DescriptorBasedIr::class)
class IrLazyTypeParameter(
startOffset: Int,
endOffset: Int,
@@ -6,6 +6,7 @@
package org.jetbrains.kotlin.ir.declarations.lazy
import org.jetbrains.kotlin.descriptors.TypeParameterDescriptor
import org.jetbrains.kotlin.ir.DescriptorBasedIr
import org.jetbrains.kotlin.ir.declarations.IrTypeParametersContainer
import org.jetbrains.kotlin.ir.symbols.IrTypeParameterSymbol
import org.jetbrains.kotlin.ir.util.ReferenceSymbolTable
@@ -26,6 +27,7 @@ class LazyScopedTypeParametersResolver(private val symbolTable: ReferenceSymbolT
typeParameterScopes.removeFirst()
}
@DescriptorBasedIr
override fun resolveScopedTypeParameter(typeParameterDescriptor: TypeParameterDescriptor): IrTypeParameterSymbol? {
//Just support accessor scoped symbols resolve in external declaration
//there should be enough to process only parent typeparameters
@@ -286,8 +286,6 @@ class IrBuiltIns(
val checkNotNullSymbol = defineCheckNotNullOperator()
val checkNotNull = checkNotNullSymbol.descriptor
private fun TypeConstructor.makeNonNullType() = KotlinTypeFactory.simpleType(Annotations.EMPTY, this, listOf(), false)
private fun TypeConstructor.makeNullableType() = KotlinTypeFactory.simpleType(Annotations.EMPTY, this, listOf(), true)
@@ -9,6 +9,7 @@ import org.jetbrains.kotlin.builtins.KOTLIN_REFLECT_FQ_NAME
import org.jetbrains.kotlin.builtins.functions.FunctionClassDescriptor
import org.jetbrains.kotlin.descriptors.*
import org.jetbrains.kotlin.incremental.components.NoLookupLocation
import org.jetbrains.kotlin.ir.DescriptorBasedIr
import org.jetbrains.kotlin.ir.declarations.*
import org.jetbrains.kotlin.ir.declarations.impl.*
import org.jetbrains.kotlin.ir.symbols.IrClassSymbol
@@ -26,6 +27,7 @@ import org.jetbrains.kotlin.resolve.scopes.DescriptorKindFilter
import org.jetbrains.kotlin.types.KotlinType
import org.jetbrains.kotlin.types.Variance
@OptIn(DescriptorBasedIr::class)
abstract class IrAbstractFunctionFactory {
abstract fun functionClassDescriptor(arity: Int): FunctionClassDescriptor
@@ -75,6 +77,7 @@ abstract class IrAbstractFunctionFactory {
}
}
@OptIn(DescriptorBasedIr::class)
class IrFunctionFactory(private val irBuiltIns: IrBuiltIns, private val symbolTable: SymbolTable) : IrAbstractFunctionFactory() {
// TODO: Lazieness

Some files were not shown because too many files have changed in this diff Show More