[IR] Remove FunctionDescriptor from IrCall-like node's constructor interface
This commit is contained in:
@@ -680,8 +680,7 @@ class Fir2IrVisitor(
|
|||||||
when {
|
when {
|
||||||
symbol is IrConstructorSymbol -> IrConstructorCallImpl.fromSymbolOwner(startOffset, endOffset, type, symbol)
|
symbol is IrConstructorSymbol -> IrConstructorCallImpl.fromSymbolOwner(startOffset, endOffset, type, symbol)
|
||||||
symbol is IrSimpleFunctionSymbol -> IrCallImpl(
|
symbol is IrSimpleFunctionSymbol -> IrCallImpl(
|
||||||
startOffset, endOffset, type, symbol, symbol.descriptor,
|
startOffset, endOffset, type, symbol, origin = calleeReference.statementOrigin()
|
||||||
origin = calleeReference.statementOrigin()
|
|
||||||
)
|
)
|
||||||
symbol is IrPropertySymbol && symbol.isBound -> {
|
symbol is IrPropertySymbol && symbol.isBound -> {
|
||||||
val getter = symbol.owner.getter
|
val getter = symbol.owner.getter
|
||||||
@@ -827,7 +826,7 @@ class Fir2IrVisitor(
|
|||||||
is IrFunctionSymbol -> {
|
is IrFunctionSymbol -> {
|
||||||
IrFunctionReferenceImpl(
|
IrFunctionReferenceImpl(
|
||||||
startOffset, endOffset, type, symbol,
|
startOffset, endOffset, type, symbol,
|
||||||
symbol.descriptor, 0
|
0
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
else -> {
|
else -> {
|
||||||
@@ -904,7 +903,7 @@ class Fir2IrVisitor(
|
|||||||
listOf(
|
listOf(
|
||||||
anonymousClass,
|
anonymousClass,
|
||||||
IrConstructorCallImpl.fromSymbolOwner(
|
IrConstructorCallImpl.fromSymbolOwner(
|
||||||
startOffset, endOffset, anonymousClassType, anonymousClass.constructors.first().symbol
|
startOffset, endOffset, anonymousClassType, anonymousClass.constructors.first().symbol, anonymousClass.typeParameters.size
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -86,8 +86,8 @@ fun IrClass.addSimpleDelegatingConstructor(
|
|||||||
listOf(
|
listOf(
|
||||||
IrDelegatingConstructorCallImpl(
|
IrDelegatingConstructorCallImpl(
|
||||||
startOffset, endOffset, irBuiltIns.unitType,
|
startOffset, endOffset, irBuiltIns.unitType,
|
||||||
superConstructor.symbol, superConstructor.descriptor,
|
superConstructor.symbol, 0,
|
||||||
0, superConstructor.valueParameters.size
|
superConstructor.valueParameters.size
|
||||||
).apply {
|
).apply {
|
||||||
constructor.valueParameters.forEachIndexed { idx, parameter ->
|
constructor.valueParameters.forEachIndexed { idx, parameter ->
|
||||||
putValueArgument(idx, IrGetValueImpl(startOffset, endOffset, parameter.type, parameter.symbol))
|
putValueArgument(idx, IrGetValueImpl(startOffset, endOffset, parameter.type, parameter.symbol))
|
||||||
|
|||||||
+1
-3
@@ -129,7 +129,7 @@ open class DefaultArgumentStubGenerator(
|
|||||||
startOffset = irFunction.startOffset,
|
startOffset = irFunction.startOffset,
|
||||||
endOffset = irFunction.endOffset,
|
endOffset = irFunction.endOffset,
|
||||||
type = context.irBuiltIns.unitType,
|
type = context.irBuiltIns.unitType,
|
||||||
symbol = irFunction.symbol, descriptor = irFunction.symbol.descriptor,
|
symbol = irFunction.symbol,
|
||||||
typeArgumentsCount = newIrFunction.parentAsClass.typeParameters.size + newIrFunction.typeParameters.size
|
typeArgumentsCount = newIrFunction.parentAsClass.typeParameters.size + newIrFunction.typeParameters.size
|
||||||
).apply {
|
).apply {
|
||||||
passTypeArgumentsFrom(newIrFunction.parentAsClass)
|
passTypeArgumentsFrom(newIrFunction.parentAsClass)
|
||||||
@@ -269,7 +269,6 @@ open class DefaultParameterInjector(
|
|||||||
endOffset = expression.endOffset,
|
endOffset = expression.endOffset,
|
||||||
type = context.irBuiltIns.unitType,
|
type = context.irBuiltIns.unitType,
|
||||||
symbol = it as IrConstructorSymbol,
|
symbol = it as IrConstructorSymbol,
|
||||||
descriptor = it.descriptor,
|
|
||||||
typeArgumentsCount = expression.typeArgumentsCount
|
typeArgumentsCount = expression.typeArgumentsCount
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
@@ -311,7 +310,6 @@ open class DefaultParameterInjector(
|
|||||||
endOffset = expression.endOffset,
|
endOffset = expression.endOffset,
|
||||||
type = expression.type,
|
type = expression.type,
|
||||||
symbol = it,
|
symbol = it,
|
||||||
descriptor = it.descriptor,
|
|
||||||
typeArgumentsCount = expression.typeArgumentsCount,
|
typeArgumentsCount = expression.typeArgumentsCount,
|
||||||
origin = DEFAULT_DISPATCH_CALL,
|
origin = DEFAULT_DISPATCH_CALL,
|
||||||
superQualifierSymbol = expression.superQualifierSymbol
|
superQualifierSymbol = expression.superQualifierSymbol
|
||||||
|
|||||||
+1
-3
@@ -150,8 +150,7 @@ class InnerClassConstructorCallsLowering(val context: BackendContext) : FileLowe
|
|||||||
|
|
||||||
val newCallee = context.declarationFactory.getInnerClassConstructorWithOuterThisParameter(classConstructor)
|
val newCallee = context.declarationFactory.getInnerClassConstructorWithOuterThisParameter(classConstructor)
|
||||||
val newCall = IrDelegatingConstructorCallImpl(
|
val newCall = IrDelegatingConstructorCallImpl(
|
||||||
expression.startOffset, expression.endOffset, context.irBuiltIns.unitType, newCallee.symbol, newCallee.descriptor,
|
expression.startOffset, expression.endOffset, context.irBuiltIns.unitType, newCallee.symbol, expression.typeArgumentsCount
|
||||||
expression.typeArgumentsCount
|
|
||||||
).apply { copyTypeArgumentsFrom(expression) }
|
).apply { copyTypeArgumentsFrom(expression) }
|
||||||
|
|
||||||
newCall.putValueArgument(0, dispatchReceiver)
|
newCall.putValueArgument(0, dispatchReceiver)
|
||||||
@@ -177,7 +176,6 @@ class InnerClassConstructorCallsLowering(val context: BackendContext) : FileLowe
|
|||||||
endOffset,
|
endOffset,
|
||||||
type,
|
type,
|
||||||
newCallee.symbol,
|
newCallee.symbol,
|
||||||
newCallee.descriptor,
|
|
||||||
typeArgumentsCount,
|
typeArgumentsCount,
|
||||||
origin
|
origin
|
||||||
)
|
)
|
||||||
|
|||||||
+2
-4
@@ -283,7 +283,6 @@ class LocalDeclarationsLowering(
|
|||||||
expression.startOffset, expression.endOffset,
|
expression.startOffset, expression.endOffset,
|
||||||
context.irBuiltIns.unitType,
|
context.irBuiltIns.unitType,
|
||||||
newCallee.symbol,
|
newCallee.symbol,
|
||||||
newCallee.descriptor,
|
|
||||||
expression.typeArgumentsCount
|
expression.typeArgumentsCount
|
||||||
).also {
|
).also {
|
||||||
it.fillArguments2(expression, newCallee)
|
it.fillArguments2(expression, newCallee)
|
||||||
@@ -341,7 +340,6 @@ class LocalDeclarationsLowering(
|
|||||||
expression.startOffset, expression.endOffset,
|
expression.startOffset, expression.endOffset,
|
||||||
expression.type, // TODO functional type for transformed descriptor
|
expression.type, // TODO functional type for transformed descriptor
|
||||||
newCallee.symbol,
|
newCallee.symbol,
|
||||||
newCallee.descriptor,
|
|
||||||
expression.typeArgumentsCount,
|
expression.typeArgumentsCount,
|
||||||
expression.origin
|
expression.origin
|
||||||
).also {
|
).also {
|
||||||
@@ -440,9 +438,9 @@ class LocalDeclarationsLowering(
|
|||||||
oldCall.startOffset, oldCall.endOffset,
|
oldCall.startOffset, oldCall.endOffset,
|
||||||
newCallee.returnType,
|
newCallee.returnType,
|
||||||
newCallee.symbol,
|
newCallee.symbol,
|
||||||
newCallee.descriptor,
|
|
||||||
oldCall.typeArgumentsCount,
|
oldCall.typeArgumentsCount,
|
||||||
oldCall.origin, oldCall.superQualifierSymbol
|
oldCall.origin,
|
||||||
|
oldCall.superQualifierSymbol
|
||||||
).also {
|
).also {
|
||||||
it.copyTypeArgumentsFrom(oldCall)
|
it.copyTypeArgumentsFrom(oldCall)
|
||||||
}
|
}
|
||||||
|
|||||||
+1
-2
@@ -37,8 +37,7 @@ class ProvisionalFunctionExpressionLowering :
|
|||||||
function,
|
function,
|
||||||
IrFunctionReferenceImpl(
|
IrFunctionReferenceImpl(
|
||||||
startOffset, endOffset, type,
|
startOffset, endOffset, type,
|
||||||
function.symbol, function.descriptor, 0,
|
function.symbol, 0, origin
|
||||||
origin
|
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|||||||
+2
-2
@@ -44,7 +44,7 @@ internal fun IrExpression.negate(): IrExpression {
|
|||||||
it.name == OperatorNameConventions.UNARY_MINUS &&
|
it.name == OperatorNameConventions.UNARY_MINUS &&
|
||||||
it.valueParameters.isEmpty()
|
it.valueParameters.isEmpty()
|
||||||
}
|
}
|
||||||
IrCallImpl(startOffset, endOffset, type, unaryMinusFun.symbol, unaryMinusFun.descriptor).apply {
|
IrCallImpl(startOffset, endOffset, type, unaryMinusFun.symbol).apply {
|
||||||
dispatchReceiver = this@negate
|
dispatchReceiver = this@negate
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -62,7 +62,7 @@ internal fun IrExpression.decrement(): IrExpression {
|
|||||||
it.name == OperatorNameConventions.DEC &&
|
it.name == OperatorNameConventions.DEC &&
|
||||||
it.valueParameters.isEmpty()
|
it.valueParameters.isEmpty()
|
||||||
}
|
}
|
||||||
IrCallImpl(startOffset, endOffset, type, decFun.symbol, decFun.descriptor).apply {
|
IrCallImpl(startOffset, endOffset, type, decFun.symbol).apply {
|
||||||
dispatchReceiver = this@decrement
|
dispatchReceiver = this@decrement
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -32,7 +32,6 @@ object JsIrBuilder {
|
|||||||
UNDEFINED_OFFSET,
|
UNDEFINED_OFFSET,
|
||||||
type ?: target.owner.returnType,
|
type ?: target.owner.returnType,
|
||||||
target,
|
target,
|
||||||
target.descriptor,
|
|
||||||
target.descriptor.typeParametersCount,
|
target.descriptor.typeParametersCount,
|
||||||
SYNTHESIZED_STATEMENT
|
SYNTHESIZED_STATEMENT
|
||||||
).apply {
|
).apply {
|
||||||
@@ -186,7 +185,7 @@ object JsIrBuilder {
|
|||||||
IrCompositeImpl(UNDEFINED_OFFSET, UNDEFINED_OFFSET, type, SYNTHESIZED_STATEMENT, statements)
|
IrCompositeImpl(UNDEFINED_OFFSET, UNDEFINED_OFFSET, type, SYNTHESIZED_STATEMENT, statements)
|
||||||
|
|
||||||
fun buildFunctionReference(type: IrType, symbol: IrFunctionSymbol) =
|
fun buildFunctionReference(type: IrType, symbol: IrFunctionSymbol) =
|
||||||
IrFunctionReferenceImpl(UNDEFINED_OFFSET, UNDEFINED_OFFSET, type, symbol, symbol.descriptor, 0, null)
|
IrFunctionReferenceImpl(UNDEFINED_OFFSET, UNDEFINED_OFFSET, type, symbol, 0, null)
|
||||||
|
|
||||||
fun buildVar(
|
fun buildVar(
|
||||||
type: IrType,
|
type: IrType,
|
||||||
|
|||||||
-1
@@ -92,7 +92,6 @@ class CallableReferenceLowering(val context: JsIrBackendContext) : FileLoweringP
|
|||||||
callable.startOffset, callable.endOffset,
|
callable.startOffset, callable.endOffset,
|
||||||
newTarget.symbol.owner.returnType,
|
newTarget.symbol.owner.returnType,
|
||||||
newTarget.symbol,
|
newTarget.symbol,
|
||||||
newTarget.symbol.descriptor,
|
|
||||||
callable.origin
|
callable.origin
|
||||||
).apply {
|
).apply {
|
||||||
copyTypeArgumentsFrom(callable)
|
copyTypeArgumentsFrom(callable)
|
||||||
|
|||||||
-2
@@ -79,7 +79,6 @@ class JsDefaultCallbackGenerator(val context: JsIrBackendContext): BodyLoweringP
|
|||||||
endOffset,
|
endOffset,
|
||||||
context.irBuiltIns.anyType,
|
context.irBuiltIns.anyType,
|
||||||
originalFunction.symbol,
|
originalFunction.symbol,
|
||||||
originalFunction.descriptor,
|
|
||||||
0,
|
0,
|
||||||
BIND_CALL
|
BIND_CALL
|
||||||
)
|
)
|
||||||
@@ -91,7 +90,6 @@ class JsDefaultCallbackGenerator(val context: JsIrBackendContext): BodyLoweringP
|
|||||||
endOffset,
|
endOffset,
|
||||||
context.irBuiltIns.anyType,
|
context.irBuiltIns.anyType,
|
||||||
context.intrinsics.jsBind.symbol,
|
context.intrinsics.jsBind.symbol,
|
||||||
context.intrinsics.jsBind.descriptor,
|
|
||||||
BIND_CALL,
|
BIND_CALL,
|
||||||
superQualifierSymbol
|
superQualifierSymbol
|
||||||
)
|
)
|
||||||
|
|||||||
+3
-5
@@ -82,9 +82,8 @@ class PrivateMembersLowering(val context: JsIrBackendContext) : FileLoweringPass
|
|||||||
IrFunctionReferenceImpl(
|
IrFunctionReferenceImpl(
|
||||||
expression.startOffset, expression.endOffset,
|
expression.startOffset, expression.endOffset,
|
||||||
expression.type,
|
expression.type,
|
||||||
it.symbol, it.descriptor,
|
it.symbol, expression.typeArgumentsCount,
|
||||||
expression.typeArgumentsCount, expression.valueArgumentsCount,
|
expression.valueArgumentsCount, expression.origin
|
||||||
expression.origin
|
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
} ?: expression
|
} ?: expression
|
||||||
@@ -113,8 +112,7 @@ class PrivateMembersLowering(val context: JsIrBackendContext) : FileLoweringPass
|
|||||||
val newExpression = IrCallImpl(
|
val newExpression = IrCallImpl(
|
||||||
expression.startOffset, expression.endOffset,
|
expression.startOffset, expression.endOffset,
|
||||||
expression.type,
|
expression.type,
|
||||||
staticTarget.symbol, staticTarget.descriptor,
|
staticTarget.symbol, expression.typeArgumentsCount,
|
||||||
expression.typeArgumentsCount,
|
|
||||||
expression.origin,
|
expression.origin,
|
||||||
expression.superQualifierSymbol
|
expression.superQualifierSymbol
|
||||||
)
|
)
|
||||||
|
|||||||
-2
@@ -75,7 +75,6 @@ private class ScriptRemoveReceiverLowering(val context: CommonBackendContext) :
|
|||||||
type.annotations
|
type.annotations
|
||||||
),
|
),
|
||||||
symbol,
|
symbol,
|
||||||
descriptor,
|
|
||||||
typeArgumentsCount,
|
typeArgumentsCount,
|
||||||
valueArgumentsCount,
|
valueArgumentsCount,
|
||||||
origin
|
origin
|
||||||
@@ -111,7 +110,6 @@ private class ScriptRemoveReceiverLowering(val context: CommonBackendContext) :
|
|||||||
type.annotations
|
type.annotations
|
||||||
),
|
),
|
||||||
symbol,
|
symbol,
|
||||||
descriptor,
|
|
||||||
typeArgumentsCount,
|
typeArgumentsCount,
|
||||||
field,
|
field,
|
||||||
getter,
|
getter,
|
||||||
|
|||||||
+1
-1
@@ -238,7 +238,7 @@ private class CallsiteRedirectionTransformer(context: JsIrBackendContext) : IrEl
|
|||||||
private fun replaceSecondaryConstructorWithFactoryFunction(
|
private fun replaceSecondaryConstructorWithFactoryFunction(
|
||||||
call: IrFunctionAccessExpression,
|
call: IrFunctionAccessExpression,
|
||||||
newTarget: IrSimpleFunctionSymbol
|
newTarget: IrSimpleFunctionSymbol
|
||||||
) = IrCallImpl(call.startOffset, call.endOffset, call.type, newTarget, newTarget.descriptor, call.typeArgumentsCount).apply {
|
) = IrCallImpl(call.startOffset, call.endOffset, call.type, newTarget, call.typeArgumentsCount).apply {
|
||||||
|
|
||||||
copyTypeArgumentsFrom(call)
|
copyTypeArgumentsFrom(call)
|
||||||
|
|
||||||
|
|||||||
+2
-9
@@ -6,23 +6,16 @@
|
|||||||
package org.jetbrains.kotlin.ir.backend.js.lower
|
package org.jetbrains.kotlin.ir.backend.js.lower
|
||||||
|
|
||||||
import org.jetbrains.kotlin.backend.common.FileLoweringPass
|
import org.jetbrains.kotlin.backend.common.FileLoweringPass
|
||||||
import org.jetbrains.kotlin.backend.common.lower.callsSuper
|
|
||||||
import org.jetbrains.kotlin.ir.IrStatement
|
|
||||||
import org.jetbrains.kotlin.ir.UNDEFINED_OFFSET
|
import org.jetbrains.kotlin.ir.UNDEFINED_OFFSET
|
||||||
import org.jetbrains.kotlin.ir.backend.js.JsIrBackendContext
|
import org.jetbrains.kotlin.ir.backend.js.JsIrBackendContext
|
||||||
import org.jetbrains.kotlin.ir.backend.js.ir.JsIrBuilder
|
|
||||||
import org.jetbrains.kotlin.ir.declarations.IrClass
|
import org.jetbrains.kotlin.ir.declarations.IrClass
|
||||||
import org.jetbrains.kotlin.ir.declarations.IrConstructor
|
|
||||||
import org.jetbrains.kotlin.ir.declarations.IrDeclarationParent
|
import org.jetbrains.kotlin.ir.declarations.IrDeclarationParent
|
||||||
import org.jetbrains.kotlin.ir.declarations.IrFile
|
import org.jetbrains.kotlin.ir.declarations.IrFile
|
||||||
import org.jetbrains.kotlin.ir.expressions.*
|
import org.jetbrains.kotlin.ir.expressions.*
|
||||||
import org.jetbrains.kotlin.ir.expressions.impl.*
|
import org.jetbrains.kotlin.ir.expressions.impl.*
|
||||||
import org.jetbrains.kotlin.ir.types.isNullableString
|
import org.jetbrains.kotlin.ir.types.isNullableString
|
||||||
import org.jetbrains.kotlin.ir.types.isString
|
|
||||||
import org.jetbrains.kotlin.ir.types.makeNotNull
|
import org.jetbrains.kotlin.ir.types.makeNotNull
|
||||||
import org.jetbrains.kotlin.ir.util.defaultType
|
|
||||||
import org.jetbrains.kotlin.ir.util.isThrowable
|
import org.jetbrains.kotlin.ir.util.isThrowable
|
||||||
import org.jetbrains.kotlin.ir.util.isThrowableTypeOrSubtype
|
|
||||||
import org.jetbrains.kotlin.ir.visitors.IrElementTransformer
|
import org.jetbrains.kotlin.ir.visitors.IrElementTransformer
|
||||||
|
|
||||||
|
|
||||||
@@ -74,7 +67,7 @@ class ThrowableLowering(val context: JsIrBackendContext) : FileLoweringPass {
|
|||||||
val (messageArg, causeArg) = expression.extractThrowableArguments()
|
val (messageArg, causeArg) = expression.extractThrowableArguments()
|
||||||
|
|
||||||
return expression.run {
|
return expression.run {
|
||||||
IrCallImpl(startOffset, endOffset, type, newThrowableFunction, newThrowableFunction.descriptor).also {
|
IrCallImpl(startOffset, endOffset, type, newThrowableFunction).also {
|
||||||
it.putValueArgument(0, messageArg)
|
it.putValueArgument(0, messageArg)
|
||||||
it.putValueArgument(1, causeArg)
|
it.putValueArgument(1, causeArg)
|
||||||
}
|
}
|
||||||
@@ -91,7 +84,7 @@ class ThrowableLowering(val context: JsIrBackendContext) : FileLoweringPass {
|
|||||||
val thisReceiver = IrGetValueImpl(expression.startOffset, expression.endOffset, klass.thisReceiver!!.symbol)
|
val thisReceiver = IrGetValueImpl(expression.startOffset, expression.endOffset, klass.thisReceiver!!.symbol)
|
||||||
|
|
||||||
return expression.run {
|
return expression.run {
|
||||||
IrCallImpl(startOffset, endOffset, type, extendThrowableFunction, extendThrowableFunction.descriptor).also {
|
IrCallImpl(startOffset, endOffset, type, extendThrowableFunction).also {
|
||||||
it.putValueArgument(0, thisReceiver)
|
it.putValueArgument(0, thisReceiver)
|
||||||
it.putValueArgument(1, messageArg)
|
it.putValueArgument(1, messageArg)
|
||||||
it.putValueArgument(2, causeArg)
|
it.putValueArgument(2, causeArg)
|
||||||
|
|||||||
+1
-2
@@ -284,8 +284,7 @@ private class BridgeLowering(val context: JvmBackendContext) : ClassLoweringPass
|
|||||||
IrCallImpl(
|
IrCallImpl(
|
||||||
UNDEFINED_OFFSET, UNDEFINED_OFFSET,
|
UNDEFINED_OFFSET, UNDEFINED_OFFSET,
|
||||||
maybeOrphanedTarget.returnType,
|
maybeOrphanedTarget.returnType,
|
||||||
maybeOrphanedTarget.symbol, maybeOrphanedTarget.descriptor,
|
maybeOrphanedTarget.symbol, origin = IrStatementOrigin.BRIDGE_DELEGATION,
|
||||||
origin = IrStatementOrigin.BRIDGE_DELEGATION,
|
|
||||||
superQualifierSymbol = if (invokeStatically) maybeOrphanedTarget.parentAsClass.symbol else null
|
superQualifierSymbol = if (invokeStatically) maybeOrphanedTarget.parentAsClass.symbol else null
|
||||||
).apply {
|
).apply {
|
||||||
passTypeArgumentsFrom(this@createBridgeBody)
|
passTypeArgumentsFrom(this@createBridgeBody)
|
||||||
|
|||||||
+1
-5
@@ -271,7 +271,6 @@ private class EnumClassLowering(val context: JvmBackendContext) : ClassLoweringP
|
|||||||
endOffset,
|
endOffset,
|
||||||
context.irBuiltIns.unitType,
|
context.irBuiltIns.unitType,
|
||||||
enumConstructorCall.symbol,
|
enumConstructorCall.symbol,
|
||||||
enumConstructorCall.descriptor,
|
|
||||||
enumConstructorCall.typeArgumentsCount
|
enumConstructorCall.typeArgumentsCount
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -309,7 +308,6 @@ private class EnumClassLowering(val context: JvmBackendContext) : ClassLoweringP
|
|||||||
endOffset,
|
endOffset,
|
||||||
context.irBuiltIns.unitType,
|
context.irBuiltIns.unitType,
|
||||||
loweredDelegatedConstructor.symbol,
|
loweredDelegatedConstructor.symbol,
|
||||||
loweredDelegatedConstructor.descriptor,
|
|
||||||
loweredDelegatedConstructor.typeParameters.size
|
loweredDelegatedConstructor.typeParameters.size
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -370,7 +368,6 @@ private class EnumClassLowering(val context: JvmBackendContext) : ClassLoweringP
|
|||||||
endOffset,
|
endOffset,
|
||||||
context.irBuiltIns.unitType,
|
context.irBuiltIns.unitType,
|
||||||
loweredConstructor.symbol,
|
loweredConstructor.symbol,
|
||||||
loweredConstructor.descriptor,
|
|
||||||
loweredConstructor.typeParameters.size
|
loweredConstructor.typeParameters.size
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
@@ -489,7 +486,6 @@ private class EnumClassLowering(val context: JvmBackendContext) : ClassLoweringP
|
|||||||
UNDEFINED_OFFSET,
|
UNDEFINED_OFFSET,
|
||||||
returnType,
|
returnType,
|
||||||
enumValueOf,
|
enumValueOf,
|
||||||
substitutedValueOfDescriptor,
|
|
||||||
enumValueOf.owner.typeParameters.size
|
enumValueOf.owner.typeParameters.size
|
||||||
)
|
)
|
||||||
irValueOfCall.putTypeArgument(0, irClass.defaultType)
|
irValueOfCall.putTypeArgument(0, irClass.defaultType)
|
||||||
@@ -515,7 +511,7 @@ private class EnumClassLowering(val context: JvmBackendContext) : ClassLoweringP
|
|||||||
val cloneFun = context.irBuiltIns.arrayClass.owner.functions.find { it.name.asString() == "clone" }!!
|
val cloneFun = context.irBuiltIns.arrayClass.owner.functions.find { it.name.asString() == "clone" }!!
|
||||||
val returnType = valuesFunction.symbol.owner.returnType
|
val returnType = valuesFunction.symbol.owner.returnType
|
||||||
val irCloneValues =
|
val irCloneValues =
|
||||||
IrCallImpl(UNDEFINED_OFFSET, UNDEFINED_OFFSET, returnType, cloneFun.symbol, cloneFun.descriptor, 0).apply {
|
IrCallImpl(UNDEFINED_OFFSET, UNDEFINED_OFFSET, returnType, cloneFun.symbol, 0).apply {
|
||||||
dispatchReceiver =
|
dispatchReceiver =
|
||||||
IrGetFieldImpl(UNDEFINED_OFFSET, UNDEFINED_OFFSET, valuesField.symbol, valuesField.symbol.owner.type)
|
IrGetFieldImpl(UNDEFINED_OFFSET, UNDEFINED_OFFSET, valuesField.symbol, valuesField.symbol.owner.type)
|
||||||
}
|
}
|
||||||
|
|||||||
+1
-4
@@ -7,7 +7,6 @@ package org.jetbrains.kotlin.backend.jvm.lower
|
|||||||
|
|
||||||
import org.jetbrains.kotlin.backend.common.FileLoweringPass
|
import org.jetbrains.kotlin.backend.common.FileLoweringPass
|
||||||
import org.jetbrains.kotlin.backend.common.IrElementTransformerVoidWithContext
|
import org.jetbrains.kotlin.backend.common.IrElementTransformerVoidWithContext
|
||||||
import org.jetbrains.kotlin.backend.common.ir.copyTypeParametersFrom
|
|
||||||
import org.jetbrains.kotlin.backend.common.lower.createIrBuilder
|
import org.jetbrains.kotlin.backend.common.lower.createIrBuilder
|
||||||
import org.jetbrains.kotlin.backend.common.lower.irBlock
|
import org.jetbrains.kotlin.backend.common.lower.irBlock
|
||||||
import org.jetbrains.kotlin.backend.common.phaser.makeIrFilePhase
|
import org.jetbrains.kotlin.backend.common.phaser.makeIrFilePhase
|
||||||
@@ -106,7 +105,6 @@ internal class InlineCallableReferenceToLambdaPhase(val context: JvmBackendConte
|
|||||||
expression.endOffset,
|
expression.endOffset,
|
||||||
field.type,
|
field.type,
|
||||||
function.symbol,
|
function.symbol,
|
||||||
function.symbol.descriptor,
|
|
||||||
typeArgumentsCount = 0,
|
typeArgumentsCount = 0,
|
||||||
origin = IrStatementOrigin.LAMBDA
|
origin = IrStatementOrigin.LAMBDA
|
||||||
).apply {
|
).apply {
|
||||||
@@ -145,7 +143,7 @@ internal class InlineCallableReferenceToLambdaPhase(val context: JvmBackendConte
|
|||||||
expression.endOffset
|
expression.endOffset
|
||||||
).run {
|
).run {
|
||||||
irExprBody(irCall(referencedFunction).apply {
|
irExprBody(irCall(referencedFunction).apply {
|
||||||
this@apply.descriptor.typeParameters.forEach {
|
this@apply.symbol.owner.allTypeParameters.forEach {
|
||||||
putTypeArgument(it.index, expression.getTypeArgument(it.index))
|
putTypeArgument(it.index, expression.getTypeArgument(it.index))
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -176,7 +174,6 @@ internal class InlineCallableReferenceToLambdaPhase(val context: JvmBackendConte
|
|||||||
expression.endOffset,
|
expression.endOffset,
|
||||||
referencedFunction.returnType,
|
referencedFunction.returnType,
|
||||||
function.symbol,
|
function.symbol,
|
||||||
function.symbol.descriptor,
|
|
||||||
referencedFunction.typeParameters.size,
|
referencedFunction.typeParameters.size,
|
||||||
IrStatementOrigin.LAMBDA
|
IrStatementOrigin.LAMBDA
|
||||||
).apply {
|
).apply {
|
||||||
|
|||||||
-1
@@ -218,7 +218,6 @@ internal class InterfaceLowering(val context: JvmBackendContext) : IrElementTran
|
|||||||
endOffset,
|
endOffset,
|
||||||
type,
|
type,
|
||||||
newFunction.symbol,
|
newFunction.symbol,
|
||||||
newFunction.descriptor,
|
|
||||||
typeArgumentsCount,
|
typeArgumentsCount,
|
||||||
origin
|
origin
|
||||||
).apply {
|
).apply {
|
||||||
|
|||||||
+2
-3
@@ -225,9 +225,8 @@ private class JvmInlineClassLowering(private val context: JvmBackendContext) : F
|
|||||||
|
|
||||||
return IrFunctionReferenceImpl(
|
return IrFunctionReferenceImpl(
|
||||||
expression.startOffset, expression.endOffset, expression.type,
|
expression.startOffset, expression.endOffset, expression.type,
|
||||||
function.symbol, function.descriptor,
|
function.symbol, function.typeParameters.size,
|
||||||
function.typeParameters.size, function.valueParameters.size,
|
function.valueParameters.size, expression.origin
|
||||||
expression.origin
|
|
||||||
).apply {
|
).apply {
|
||||||
buildReplacement(expression.symbol.owner, expression, replacement)
|
buildReplacement(expression.symbol.owner, expression, replacement)
|
||||||
}.copyAttributes(expression)
|
}.copyAttributes(expression)
|
||||||
|
|||||||
+1
-1
@@ -58,7 +58,7 @@ private class JvmOverloadsAnnotationLowering(val context: JvmBackendContext) : C
|
|||||||
val wrapperIrFunction = generateWrapperHeader(target, numDefaultParametersToExpect)
|
val wrapperIrFunction = generateWrapperHeader(target, numDefaultParametersToExpect)
|
||||||
|
|
||||||
val call = if (target is IrConstructor)
|
val call = if (target is IrConstructor)
|
||||||
IrDelegatingConstructorCallImpl(UNDEFINED_OFFSET, UNDEFINED_OFFSET, context.irBuiltIns.unitType, target.symbol, target.descriptor)
|
IrDelegatingConstructorCallImpl(UNDEFINED_OFFSET, UNDEFINED_OFFSET, context.irBuiltIns.unitType, target.symbol)
|
||||||
else
|
else
|
||||||
IrCallImpl(UNDEFINED_OFFSET, UNDEFINED_OFFSET, target.returnType, target.symbol)
|
IrCallImpl(UNDEFINED_OFFSET, UNDEFINED_OFFSET, target.returnType, target.symbol)
|
||||||
for (arg in wrapperIrFunction.allTypeParameters) {
|
for (arg in wrapperIrFunction.allTypeParameters) {
|
||||||
|
|||||||
-3
@@ -23,12 +23,9 @@ import org.jetbrains.kotlin.ir.builders.irReturn
|
|||||||
import org.jetbrains.kotlin.ir.declarations.IrClass
|
import org.jetbrains.kotlin.ir.declarations.IrClass
|
||||||
import org.jetbrains.kotlin.ir.declarations.IrDeclarationOrigin
|
import org.jetbrains.kotlin.ir.declarations.IrDeclarationOrigin
|
||||||
import org.jetbrains.kotlin.ir.declarations.IrSimpleFunction
|
import org.jetbrains.kotlin.ir.declarations.IrSimpleFunction
|
||||||
import org.jetbrains.kotlin.ir.expressions.impl.IrConstImpl
|
|
||||||
import org.jetbrains.kotlin.ir.types.*
|
import org.jetbrains.kotlin.ir.types.*
|
||||||
import org.jetbrains.kotlin.ir.util.functions
|
import org.jetbrains.kotlin.ir.util.functions
|
||||||
import org.jetbrains.kotlin.ir.util.getAnnotation
|
|
||||||
import org.jetbrains.kotlin.name.Name
|
import org.jetbrains.kotlin.name.Name
|
||||||
import org.jetbrains.kotlin.resolve.DescriptorUtils
|
|
||||||
import org.jetbrains.kotlin.types.Variance
|
import org.jetbrains.kotlin.types.Variance
|
||||||
|
|
||||||
internal class MainMethodGenerationLowering(val context: JvmBackendContext) : ClassLoweringPass {
|
internal class MainMethodGenerationLowering(val context: JvmBackendContext) : ClassLoweringPass {
|
||||||
|
|||||||
+7
-13
@@ -111,7 +111,7 @@ internal class SyntheticAccessorLowering(val context: JvmBackendContext) : IrEle
|
|||||||
expression.transformChildrenVoid()
|
expression.transformChildrenVoid()
|
||||||
return IrFunctionReferenceImpl(
|
return IrFunctionReferenceImpl(
|
||||||
expression.startOffset, expression.endOffset, expression.type,
|
expression.startOffset, expression.endOffset, expression.type,
|
||||||
accessor, accessor.descriptor, accessor.owner.typeParameters.size,
|
accessor, accessor.owner.typeParameters.size,
|
||||||
accessor.owner.valueParameters.size, expression.origin
|
accessor.owner.valueParameters.size, expression.origin
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
@@ -183,8 +183,7 @@ internal class SyntheticAccessorLowering(val context: JvmBackendContext) : IrEle
|
|||||||
IrDelegatingConstructorCallImpl(
|
IrDelegatingConstructorCallImpl(
|
||||||
UNDEFINED_OFFSET, UNDEFINED_OFFSET,
|
UNDEFINED_OFFSET, UNDEFINED_OFFSET,
|
||||||
context.irBuiltIns.unitType,
|
context.irBuiltIns.unitType,
|
||||||
targetSymbol, targetSymbol.descriptor,
|
targetSymbol, targetSymbol.owner.parentAsClass.typeParameters.size + targetSymbol.owner.typeParameters.size
|
||||||
targetSymbol.owner.parentAsClass.typeParameters.size + targetSymbol.owner.typeParameters.size
|
|
||||||
).also {
|
).also {
|
||||||
copyAllParamsToArgs(it, accessor)
|
copyAllParamsToArgs(it, accessor)
|
||||||
}
|
}
|
||||||
@@ -250,8 +249,7 @@ internal class SyntheticAccessorLowering(val context: JvmBackendContext) : IrEle
|
|||||||
IrCallImpl(
|
IrCallImpl(
|
||||||
UNDEFINED_OFFSET, UNDEFINED_OFFSET,
|
UNDEFINED_OFFSET, UNDEFINED_OFFSET,
|
||||||
accessor.returnType,
|
accessor.returnType,
|
||||||
targetSymbol, targetSymbol.descriptor,
|
targetSymbol, targetSymbol.owner.typeParameters.size,
|
||||||
targetSymbol.owner.typeParameters.size,
|
|
||||||
superQualifierSymbol = superQualifierSymbol
|
superQualifierSymbol = superQualifierSymbol
|
||||||
).also {
|
).also {
|
||||||
copyAllParamsToArgs(it, accessor)
|
copyAllParamsToArgs(it, accessor)
|
||||||
@@ -344,15 +342,13 @@ internal class SyntheticAccessorLowering(val context: JvmBackendContext) : IrEle
|
|||||||
is IrCall -> IrCallImpl(
|
is IrCall -> IrCallImpl(
|
||||||
oldExpression.startOffset, oldExpression.endOffset,
|
oldExpression.startOffset, oldExpression.endOffset,
|
||||||
oldExpression.type,
|
oldExpression.type,
|
||||||
accessorSymbol, accessorSymbol.descriptor,
|
accessorSymbol, oldExpression.typeArgumentsCount,
|
||||||
oldExpression.typeArgumentsCount,
|
|
||||||
oldExpression.origin
|
oldExpression.origin
|
||||||
)
|
)
|
||||||
is IrDelegatingConstructorCall -> IrDelegatingConstructorCallImpl(
|
is IrDelegatingConstructorCall -> IrDelegatingConstructorCallImpl(
|
||||||
oldExpression.startOffset, oldExpression.endOffset,
|
oldExpression.startOffset, oldExpression.endOffset,
|
||||||
context.irBuiltIns.unitType,
|
context.irBuiltIns.unitType,
|
||||||
accessorSymbol as IrConstructorSymbol, accessorSymbol.descriptor,
|
accessorSymbol as IrConstructorSymbol, oldExpression.typeArgumentsCount
|
||||||
oldExpression.typeArgumentsCount
|
|
||||||
)
|
)
|
||||||
is IrConstructorCall ->
|
is IrConstructorCall ->
|
||||||
IrConstructorCallImpl.fromSymbolDescriptor(
|
IrConstructorCallImpl.fromSymbolDescriptor(
|
||||||
@@ -388,8 +384,7 @@ internal class SyntheticAccessorLowering(val context: JvmBackendContext) : IrEle
|
|||||||
val call = IrCallImpl(
|
val call = IrCallImpl(
|
||||||
oldExpression.startOffset, oldExpression.endOffset,
|
oldExpression.startOffset, oldExpression.endOffset,
|
||||||
oldExpression.type,
|
oldExpression.type,
|
||||||
accessorSymbol, accessorSymbol.descriptor,
|
accessorSymbol, 0,
|
||||||
0,
|
|
||||||
oldExpression.origin
|
oldExpression.origin
|
||||||
)
|
)
|
||||||
oldExpression.receiver?.let {
|
oldExpression.receiver?.let {
|
||||||
@@ -405,8 +400,7 @@ internal class SyntheticAccessorLowering(val context: JvmBackendContext) : IrEle
|
|||||||
val call = IrCallImpl(
|
val call = IrCallImpl(
|
||||||
oldExpression.startOffset, oldExpression.endOffset,
|
oldExpression.startOffset, oldExpression.endOffset,
|
||||||
oldExpression.type,
|
oldExpression.type,
|
||||||
accessorSymbol, accessorSymbol.descriptor,
|
accessorSymbol, 0,
|
||||||
0,
|
|
||||||
oldExpression.origin
|
oldExpression.origin
|
||||||
)
|
)
|
||||||
oldExpression.receiver?.let {
|
oldExpression.receiver?.let {
|
||||||
|
|||||||
@@ -261,8 +261,7 @@ class BodyGenerator(
|
|||||||
IrDelegatingConstructorCallImpl(
|
IrDelegatingConstructorCallImpl(
|
||||||
ktElement.pureStartOffset, ktElement.pureEndOffset,
|
ktElement.pureStartOffset, ktElement.pureEndOffset,
|
||||||
context.irBuiltIns.unitType,
|
context.irBuiltIns.unitType,
|
||||||
context.symbolTable.referenceConstructor(anyConstructor),
|
context.symbolTable.referenceConstructor(anyConstructor)
|
||||||
anyConstructor
|
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -125,8 +125,7 @@ class CallGenerator(statementGenerator: StatementGenerator) : StatementGenerator
|
|||||||
val getterDescriptor = descriptor.getter!!
|
val getterDescriptor = descriptor.getter!!
|
||||||
val getterSymbol = context.symbolTable.referenceFunction(getterDescriptor.original)
|
val getterSymbol = context.symbolTable.referenceFunction(getterDescriptor.original)
|
||||||
IrCallImpl(
|
IrCallImpl(
|
||||||
startOffset, endOffset, descriptor.type.toIrType(), getterSymbol, getterDescriptor,
|
startOffset, endOffset, descriptor.type.toIrType(), getterSymbol, origin ?: IrStatementOrigin.GET_LOCAL_PROPERTY
|
||||||
origin ?: IrStatementOrigin.GET_LOCAL_PROPERTY
|
|
||||||
).apply {
|
).apply {
|
||||||
putTypeArguments(typeArguments) { it.toIrType() }
|
putTypeArguments(typeArguments) { it.toIrType() }
|
||||||
}
|
}
|
||||||
@@ -141,8 +140,7 @@ class CallGenerator(statementGenerator: StatementGenerator) : StatementGenerator
|
|||||||
val irCall = IrDelegatingConstructorCallImpl(
|
val irCall = IrDelegatingConstructorCallImpl(
|
||||||
startOffset, endOffset,
|
startOffset, endOffset,
|
||||||
context.irBuiltIns.unitType,
|
context.irBuiltIns.unitType,
|
||||||
constructorSymbol,
|
constructorSymbol
|
||||||
descriptor
|
|
||||||
).apply {
|
).apply {
|
||||||
putTypeArguments(call.typeArguments) { it.toIrType() }
|
putTypeArguments(call.typeArguments) { it.toIrType() }
|
||||||
this.dispatchReceiver = dispatchReceiver?.load()
|
this.dispatchReceiver = dispatchReceiver?.load()
|
||||||
@@ -205,7 +203,6 @@ class CallGenerator(statementGenerator: StatementGenerator) : StatementGenerator
|
|||||||
startOffset, endOffset,
|
startOffset, endOffset,
|
||||||
irType,
|
irType,
|
||||||
getterSymbol,
|
getterSymbol,
|
||||||
getMethodDescriptor,
|
|
||||||
descriptor.typeParametersCount,
|
descriptor.typeParametersCount,
|
||||||
0,
|
0,
|
||||||
IrStatementOrigin.GET_PROPERTY,
|
IrStatementOrigin.GET_PROPERTY,
|
||||||
@@ -249,11 +246,12 @@ class CallGenerator(statementGenerator: StatementGenerator) : StatementGenerator
|
|||||||
): IrExpression =
|
): IrExpression =
|
||||||
call.callReceiver.call { dispatchReceiverValue, extensionReceiverValue ->
|
call.callReceiver.call { dispatchReceiverValue, extensionReceiverValue ->
|
||||||
val irType = constructorDescriptor.returnType.toIrType()
|
val irType = constructorDescriptor.returnType.toIrType()
|
||||||
|
val originalSymbol = context.symbolTable.referenceConstructor(constructorDescriptor.original)
|
||||||
|
|
||||||
IrConstructorCallImpl.fromSubstitutedDescriptor(
|
IrConstructorCallImpl.fromSubstitutedDescriptor(
|
||||||
startOffset, endOffset,
|
startOffset, endOffset,
|
||||||
irType,
|
irType,
|
||||||
context.symbolTable.referenceConstructor(constructorDescriptor.original),
|
originalSymbol,
|
||||||
constructorDescriptor,
|
|
||||||
origin
|
origin
|
||||||
).run {
|
).run {
|
||||||
putTypeArguments(call.typeArguments) { it.toIrType() }
|
putTypeArguments(call.typeArguments) { it.toIrType() }
|
||||||
@@ -322,11 +320,11 @@ class CallGenerator(statementGenerator: StatementGenerator) : StatementGenerator
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
val originalSymbol = context.symbolTable.referenceFunction(functionDescriptor.original)
|
||||||
IrCallImpl(
|
IrCallImpl(
|
||||||
startOffset, endOffset,
|
startOffset, endOffset,
|
||||||
irType,
|
irType,
|
||||||
context.symbolTable.referenceFunction(functionDescriptor.original),
|
originalSymbol,
|
||||||
functionDescriptor,
|
|
||||||
origin,
|
origin,
|
||||||
call.superQualifier?.let { context.symbolTable.referenceClass(it) }
|
call.superQualifier?.let { context.symbolTable.referenceClass(it) }
|
||||||
).run {
|
).run {
|
||||||
|
|||||||
@@ -279,10 +279,10 @@ class ClassGenerator(
|
|||||||
val substitutedOverridden = substituteOverriddenDescriptorForDelegate(delegated, overridden)
|
val substitutedOverridden = substituteOverriddenDescriptorForDelegate(delegated, overridden)
|
||||||
val returnType = substitutedOverridden.returnType!!
|
val returnType = substitutedOverridden.returnType!!
|
||||||
val irReturnType = returnType.toIrType()
|
val irReturnType = returnType.toIrType()
|
||||||
|
val originalSymbol = context.symbolTable.referenceFunction(overridden.original)
|
||||||
val irCall = IrCallImpl(
|
val irCall = IrCallImpl(
|
||||||
startOffset, endOffset, irReturnType,
|
startOffset, endOffset, irReturnType,
|
||||||
context.symbolTable.referenceFunction(overridden.original),
|
originalSymbol,
|
||||||
substitutedOverridden,
|
|
||||||
substitutedOverridden.typeParametersCount
|
substitutedOverridden.typeParametersCount
|
||||||
).apply {
|
).apply {
|
||||||
val typeArguments = getTypeArgumentsForOverriddenDescriptorDelegatingCall(delegated, overridden)
|
val typeArguments = getTypeArgumentsForOverriddenDescriptorDelegatingCall(delegated, overridden)
|
||||||
|
|||||||
+1
-1
@@ -258,7 +258,7 @@ class DataClassMembersGenerator(
|
|||||||
val hashCodeFunctionDescriptor = getHashCodeFunction(kotlinType)
|
val hashCodeFunctionDescriptor = getHashCodeFunction(kotlinType)
|
||||||
val hashCodeFunctionSymbol = declarationGenerator.context.symbolTable.referenceFunction(hashCodeFunctionDescriptor.original)
|
val hashCodeFunctionSymbol = declarationGenerator.context.symbolTable.referenceFunction(hashCodeFunctionDescriptor.original)
|
||||||
return irCall(hashCodeFunctionSymbol, context.irBuiltIns.intType).apply {
|
return irCall(hashCodeFunctionSymbol, context.irBuiltIns.intType).apply {
|
||||||
if (descriptor.dispatchReceiverParameter != null) {
|
if (hashCodeFunctionDescriptor.dispatchReceiverParameter != null) {
|
||||||
dispatchReceiver = irValue
|
dispatchReceiver = irValue
|
||||||
} else {
|
} else {
|
||||||
putValueArgument(0, irValue)
|
putValueArgument(0, irValue)
|
||||||
|
|||||||
+8
-7
@@ -412,18 +412,19 @@ class OperatorExpressionGenerator(statementGenerator: StatementGenerator) : Stat
|
|||||||
endOffset: Int,
|
endOffset: Int,
|
||||||
functionDescriptor: FunctionDescriptor,
|
functionDescriptor: FunctionDescriptor,
|
||||||
receiver: IrExpression
|
receiver: IrExpression
|
||||||
): IrExpression =
|
): IrExpression {
|
||||||
IrCallImpl(
|
val originalSymbol = context.symbolTable.referenceFunction(functionDescriptor.original)
|
||||||
|
return IrCallImpl(
|
||||||
startOffset,
|
startOffset,
|
||||||
endOffset,
|
endOffset,
|
||||||
functionDescriptor.returnType!!.toIrType(),
|
functionDescriptor.returnType!!.toIrType(),
|
||||||
context.symbolTable.referenceFunction(functionDescriptor.original),
|
originalSymbol,
|
||||||
functionDescriptor,
|
origin = null,
|
||||||
origin = null, // TODO origin for widening conversions?
|
|
||||||
superQualifierSymbol = null
|
superQualifierSymbol = null
|
||||||
).apply {
|
).apply {
|
||||||
dispatchReceiver = receiver
|
dispatchReceiver = receiver
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private fun KotlinType.findConversionFunctionTo(targetType: KotlinType): FunctionDescriptor? {
|
private fun KotlinType.findConversionFunctionTo(targetType: KotlinType): FunctionDescriptor? {
|
||||||
val targetTypeName = targetType.constructor.declarationDescriptor?.name?.asString() ?: return null
|
val targetTypeName = targetType.constructor.declarationDescriptor?.name?.asString() ?: return null
|
||||||
@@ -498,11 +499,11 @@ class OperatorExpressionGenerator(statementGenerator: StatementGenerator) : Stat
|
|||||||
)
|
)
|
||||||
) ?: throw AssertionError("Substitution failed for $checkNotNull: T=$argumentType")
|
) ?: throw AssertionError("Substitution failed for $checkNotNull: T=$argumentType")
|
||||||
|
|
||||||
|
val checkNotNullSymbol = context.irBuiltIns.checkNotNullSymbol
|
||||||
return IrCallImpl(
|
return IrCallImpl(
|
||||||
ktOperator.startOffsetSkippingComments, ktOperator.endOffset,
|
ktOperator.startOffsetSkippingComments, ktOperator.endOffset,
|
||||||
expressionType.toIrType(),
|
expressionType.toIrType(),
|
||||||
context.irBuiltIns.checkNotNullSymbol,
|
checkNotNullSymbol,
|
||||||
checkNotNullSubstituted,
|
|
||||||
origin
|
origin
|
||||||
).apply {
|
).apply {
|
||||||
putTypeArgument(0, argumentType.toIrType().makeNotNull())
|
putTypeArgument(0, argumentType.toIrType().makeNotNull())
|
||||||
|
|||||||
+3
-4
@@ -137,11 +137,11 @@ class ReflectionReferencesGenerator(statementGenerator: StatementGenerator) : St
|
|||||||
val originalProperty = propertyDescriptor.original
|
val originalProperty = propertyDescriptor.original
|
||||||
val originalGetter = originalProperty.getter?.original
|
val originalGetter = originalProperty.getter?.original
|
||||||
val originalSetter = if (mutable) originalProperty.setter?.original else null
|
val originalSetter = if (mutable) originalProperty.setter?.original else null
|
||||||
|
val originalSymbol = context.symbolTable.referenceProperty(originalProperty)
|
||||||
|
|
||||||
return IrPropertyReferenceImpl(
|
return IrPropertyReferenceImpl(
|
||||||
startOffset, endOffset, type.toIrType(),
|
startOffset, endOffset, type.toIrType(),
|
||||||
context.symbolTable.referenceProperty(originalProperty),
|
originalSymbol,
|
||||||
propertyDescriptor,
|
|
||||||
propertyDescriptor.typeParametersCount,
|
propertyDescriptor.typeParametersCount,
|
||||||
getFieldForPropertyReference(originalProperty),
|
getFieldForPropertyReference(originalProperty),
|
||||||
originalGetter?.let { context.symbolTable.referenceSimpleFunction(it) },
|
originalGetter?.let { context.symbolTable.referenceSimpleFunction(it) },
|
||||||
@@ -172,8 +172,7 @@ class ReflectionReferencesGenerator(statementGenerator: StatementGenerator) : St
|
|||||||
): IrFunctionReference =
|
): IrFunctionReference =
|
||||||
IrFunctionReferenceImpl(
|
IrFunctionReferenceImpl(
|
||||||
startOffset, endOffset, type.toIrType(),
|
startOffset, endOffset, type.toIrType(),
|
||||||
symbol, descriptor, descriptor.typeParametersCount,
|
symbol, descriptor.typeParametersCount, origin
|
||||||
origin
|
|
||||||
).apply {
|
).apply {
|
||||||
putTypeArguments(typeArguments) { it.toIrType() }
|
putTypeArguments(typeArguments) { it.toIrType() }
|
||||||
}
|
}
|
||||||
|
|||||||
+2
-3
@@ -22,7 +22,6 @@ import org.jetbrains.kotlin.ir.expressions.IrStatementOrigin
|
|||||||
import org.jetbrains.kotlin.ir.expressions.impl.IrCallImpl
|
import org.jetbrains.kotlin.ir.expressions.impl.IrCallImpl
|
||||||
import org.jetbrains.kotlin.ir.symbols.IrSimpleFunctionSymbol
|
import org.jetbrains.kotlin.ir.symbols.IrSimpleFunctionSymbol
|
||||||
import org.jetbrains.kotlin.ir.types.IrType
|
import org.jetbrains.kotlin.ir.types.IrType
|
||||||
import org.jetbrains.kotlin.types.KotlinType
|
|
||||||
|
|
||||||
class DelegatedLocalPropertyLValue(
|
class DelegatedLocalPropertyLValue(
|
||||||
private val context: IrGeneratorContext,
|
private val context: IrGeneratorContext,
|
||||||
@@ -37,10 +36,10 @@ class DelegatedLocalPropertyLValue(
|
|||||||
AssignmentReceiver {
|
AssignmentReceiver {
|
||||||
|
|
||||||
override fun load(): IrExpression =
|
override fun load(): IrExpression =
|
||||||
IrCallImpl(startOffset, endOffset, type, getterSymbol!!, getterSymbol.descriptor, origin)
|
IrCallImpl(startOffset, endOffset, type, getterSymbol!!, origin)
|
||||||
|
|
||||||
override fun store(irExpression: IrExpression): IrExpression =
|
override fun store(irExpression: IrExpression): IrExpression =
|
||||||
IrCallImpl(startOffset, endOffset, context.irBuiltIns.unitType, setterSymbol!!, setterSymbol.descriptor, origin).apply {
|
IrCallImpl(startOffset, endOffset, context.irBuiltIns.unitType, setterSymbol!!, origin).apply {
|
||||||
putValueArgument(0, irExpression)
|
putValueArgument(0, irExpression)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+2
-4
@@ -145,8 +145,7 @@ class AccessorPropertyLValue(
|
|||||||
IrCallImpl(
|
IrCallImpl(
|
||||||
startOffset, endOffset,
|
startOffset, endOffset,
|
||||||
type,
|
type,
|
||||||
getter!!, getterDescriptor,
|
getter!!, typeArgumentsCount,
|
||||||
typeArgumentsCount,
|
|
||||||
0,
|
0,
|
||||||
origin,
|
origin,
|
||||||
superQualifier
|
superQualifier
|
||||||
@@ -162,8 +161,7 @@ class AccessorPropertyLValue(
|
|||||||
IrCallImpl(
|
IrCallImpl(
|
||||||
startOffset, endOffset,
|
startOffset, endOffset,
|
||||||
context.irBuiltIns.unitType,
|
context.irBuiltIns.unitType,
|
||||||
setter!!, setterDescriptor,
|
setter!!, typeArgumentsCount,
|
||||||
typeArgumentsCount,
|
|
||||||
1,
|
1,
|
||||||
origin,
|
origin,
|
||||||
superQualifier
|
superQualifier
|
||||||
|
|||||||
@@ -196,7 +196,6 @@ fun IrBuilderWithScope.irGet(type: IrType, receiver: IrExpression?, getterSymbol
|
|||||||
startOffset, endOffset,
|
startOffset, endOffset,
|
||||||
type,
|
type,
|
||||||
getterSymbol as IrSimpleFunctionSymbol,
|
getterSymbol as IrSimpleFunctionSymbol,
|
||||||
getterSymbol.descriptor,
|
|
||||||
typeArgumentsCount = getterSymbol.owner.typeParameters.size,
|
typeArgumentsCount = getterSymbol.owner.typeParameters.size,
|
||||||
valueArgumentsCount = 0,
|
valueArgumentsCount = 0,
|
||||||
origin = IrStatementOrigin.GET_PROPERTY
|
origin = IrStatementOrigin.GET_PROPERTY
|
||||||
@@ -209,7 +208,6 @@ fun IrBuilderWithScope.irSet(type: IrType, receiver: IrExpression?, setterSymbol
|
|||||||
startOffset, endOffset,
|
startOffset, endOffset,
|
||||||
type,
|
type,
|
||||||
setterSymbol as IrSimpleFunctionSymbol,
|
setterSymbol as IrSimpleFunctionSymbol,
|
||||||
setterSymbol.descriptor,
|
|
||||||
typeArgumentsCount = setterSymbol.owner.typeParameters.size,
|
typeArgumentsCount = setterSymbol.owner.typeParameters.size,
|
||||||
valueArgumentsCount = 1,
|
valueArgumentsCount = 1,
|
||||||
origin = IrStatementOrigin.EQ
|
origin = IrStatementOrigin.EQ
|
||||||
@@ -242,7 +240,7 @@ fun IrBuilderWithScope.irCallConstructor(callee: IrConstructorSymbol, typeArgume
|
|||||||
}
|
}
|
||||||
|
|
||||||
fun IrBuilderWithScope.irCall(callee: IrSimpleFunctionSymbol, type: IrType): IrCall =
|
fun IrBuilderWithScope.irCall(callee: IrSimpleFunctionSymbol, type: IrType): IrCall =
|
||||||
IrCallImpl(startOffset, endOffset, type, callee, callee.descriptor)
|
IrCallImpl(startOffset, endOffset, type, callee)
|
||||||
|
|
||||||
fun IrBuilderWithScope.irCall(callee: IrConstructorSymbol, type: IrType): IrConstructorCall =
|
fun IrBuilderWithScope.irCall(callee: IrConstructorSymbol, type: IrType): IrConstructorCall =
|
||||||
IrConstructorCallImpl.fromSymbolDescriptor(startOffset, endOffset, type, callee)
|
IrConstructorCallImpl.fromSymbolDescriptor(startOffset, endOffset, type, callee)
|
||||||
@@ -264,7 +262,7 @@ fun IrBuilderWithScope.irCall(callee: IrFunctionSymbol): IrFunctionAccessExpress
|
|||||||
irCall(callee, callee.owner.returnType)
|
irCall(callee, callee.owner.returnType)
|
||||||
|
|
||||||
fun IrBuilderWithScope.irCall(callee: IrFunctionSymbol, descriptor: FunctionDescriptor, type: IrType): IrCall =
|
fun IrBuilderWithScope.irCall(callee: IrFunctionSymbol, descriptor: FunctionDescriptor, type: IrType): IrCall =
|
||||||
IrCallImpl(startOffset, endOffset, type, callee as IrSimpleFunctionSymbol, descriptor)
|
IrCallImpl(startOffset, endOffset, type, callee as IrSimpleFunctionSymbol)
|
||||||
|
|
||||||
fun IrBuilderWithScope.irCall(callee: IrFunction): IrFunctionAccessExpression =
|
fun IrBuilderWithScope.irCall(callee: IrFunction): IrFunctionAccessExpression =
|
||||||
irCall(callee.symbol)
|
irCall(callee.symbol)
|
||||||
@@ -273,12 +271,13 @@ fun IrBuilderWithScope.irCall(callee: IrFunction, origin: IrStatementOrigin): Ir
|
|||||||
IrCallImpl(
|
IrCallImpl(
|
||||||
startOffset, endOffset, callee.returnType,
|
startOffset, endOffset, callee.returnType,
|
||||||
callee.symbol as IrSimpleFunctionSymbol,
|
callee.symbol as IrSimpleFunctionSymbol,
|
||||||
callee.descriptor, origin
|
callee.typeParameters.size, callee.valueParameters.size,
|
||||||
|
origin
|
||||||
)
|
)
|
||||||
|
|
||||||
fun IrBuilderWithScope.irDelegatingConstructorCall(callee: IrConstructor): IrDelegatingConstructorCall =
|
fun IrBuilderWithScope.irDelegatingConstructorCall(callee: IrConstructor): IrDelegatingConstructorCall =
|
||||||
IrDelegatingConstructorCallImpl(
|
IrDelegatingConstructorCallImpl(
|
||||||
startOffset, endOffset, context.irBuiltIns.unitType, callee.symbol, callee.descriptor,
|
startOffset, endOffset, context.irBuiltIns.unitType, callee.symbol,
|
||||||
callee.parentAsClass.typeParameters.size, callee.valueParameters.size
|
callee.parentAsClass.typeParameters.size, callee.valueParameters.size
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -379,14 +378,3 @@ inline fun IrBuilderWithScope.irBlockBody(
|
|||||||
endOffset
|
endOffset
|
||||||
).blockBody(body)
|
).blockBody(body)
|
||||||
|
|
||||||
fun IrBuilderWithScope.irThrowIse(origin: IrStatementOrigin? = null) =
|
|
||||||
IrCallImpl(
|
|
||||||
startOffset, endOffset,
|
|
||||||
context.irBuiltIns.nothingType,
|
|
||||||
context.irBuiltIns.throwIseSymbol,
|
|
||||||
context.irBuiltIns.throwIseSymbol.descriptor,
|
|
||||||
typeArgumentsCount = 0,
|
|
||||||
valueArgumentsCount = 0,
|
|
||||||
origin = origin
|
|
||||||
)
|
|
||||||
|
|
||||||
|
|||||||
@@ -33,7 +33,7 @@ fun primitiveOp1(
|
|||||||
origin: IrStatementOrigin,
|
origin: IrStatementOrigin,
|
||||||
dispatchReceiver: IrExpression
|
dispatchReceiver: IrExpression
|
||||||
): IrExpression =
|
): IrExpression =
|
||||||
IrCallImpl(startOffset, endOffset, primitiveOpReturnType, primitiveOpSymbol, primitiveOpSymbol.descriptor, origin = origin).also {
|
IrCallImpl(startOffset, endOffset, primitiveOpReturnType, primitiveOpSymbol, origin = origin).also {
|
||||||
it.dispatchReceiver = dispatchReceiver
|
it.dispatchReceiver = dispatchReceiver
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -47,8 +47,7 @@ fun primitiveOp2(
|
|||||||
IrCallImpl(
|
IrCallImpl(
|
||||||
startOffset, endOffset,
|
startOffset, endOffset,
|
||||||
primitiveOpReturnType,
|
primitiveOpReturnType,
|
||||||
primitiveOpSymbol, primitiveOpSymbol.descriptor,
|
primitiveOpSymbol, typeArgumentsCount = 0,
|
||||||
typeArgumentsCount = 0,
|
|
||||||
valueArgumentsCount = 2,
|
valueArgumentsCount = 2,
|
||||||
origin = origin
|
origin = origin
|
||||||
).apply {
|
).apply {
|
||||||
|
|||||||
@@ -16,13 +16,12 @@
|
|||||||
|
|
||||||
package org.jetbrains.kotlin.ir.expressions.impl
|
package org.jetbrains.kotlin.ir.expressions.impl
|
||||||
|
|
||||||
import org.jetbrains.kotlin.descriptors.ClassDescriptor
|
|
||||||
import org.jetbrains.kotlin.descriptors.ConstructorDescriptor
|
|
||||||
import org.jetbrains.kotlin.descriptors.FunctionDescriptor
|
import org.jetbrains.kotlin.descriptors.FunctionDescriptor
|
||||||
import org.jetbrains.kotlin.ir.expressions.IrCall
|
import org.jetbrains.kotlin.ir.expressions.IrCall
|
||||||
import org.jetbrains.kotlin.ir.expressions.IrStatementOrigin
|
import org.jetbrains.kotlin.ir.expressions.IrStatementOrigin
|
||||||
import org.jetbrains.kotlin.ir.expressions.typeParametersCount
|
import org.jetbrains.kotlin.ir.expressions.typeParametersCount
|
||||||
import org.jetbrains.kotlin.ir.symbols.IrClassSymbol
|
import org.jetbrains.kotlin.ir.symbols.IrClassSymbol
|
||||||
|
import org.jetbrains.kotlin.ir.symbols.IrConstructorSymbol
|
||||||
import org.jetbrains.kotlin.ir.symbols.IrFunctionSymbol
|
import org.jetbrains.kotlin.ir.symbols.IrFunctionSymbol
|
||||||
import org.jetbrains.kotlin.ir.types.IrType
|
import org.jetbrains.kotlin.ir.types.IrType
|
||||||
import org.jetbrains.kotlin.ir.visitors.IrElementVisitor
|
import org.jetbrains.kotlin.ir.visitors.IrElementVisitor
|
||||||
@@ -32,7 +31,6 @@ class IrCallImpl(
|
|||||||
endOffset: Int,
|
endOffset: Int,
|
||||||
type: IrType,
|
type: IrType,
|
||||||
override val symbol: IrFunctionSymbol,
|
override val symbol: IrFunctionSymbol,
|
||||||
override val descriptor: FunctionDescriptor,
|
|
||||||
typeArgumentsCount: Int,
|
typeArgumentsCount: Int,
|
||||||
valueArgumentsCount: Int,
|
valueArgumentsCount: Int,
|
||||||
origin: IrStatementOrigin? = null,
|
origin: IrStatementOrigin? = null,
|
||||||
@@ -47,22 +45,23 @@ class IrCallImpl(
|
|||||||
IrCall {
|
IrCall {
|
||||||
|
|
||||||
init {
|
init {
|
||||||
if (descriptor is ConstructorDescriptor) {
|
if (symbol is IrConstructorSymbol) {
|
||||||
throw AssertionError("Should be IrConstructorCall: $descriptor")
|
throw AssertionError("Should be IrConstructorCall: ${symbol.descriptor}")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
override val descriptor: FunctionDescriptor get() = symbol.descriptor
|
||||||
|
|
||||||
constructor(
|
constructor(
|
||||||
startOffset: Int,
|
startOffset: Int,
|
||||||
endOffset: Int,
|
endOffset: Int,
|
||||||
type: IrType,
|
type: IrType,
|
||||||
symbol: IrFunctionSymbol,
|
symbol: IrFunctionSymbol,
|
||||||
descriptor: FunctionDescriptor,
|
|
||||||
origin: IrStatementOrigin? = null,
|
origin: IrStatementOrigin? = null,
|
||||||
superQualifierSymbol: IrClassSymbol? = null
|
superQualifierSymbol: IrClassSymbol? = null
|
||||||
) : this(
|
) : this(
|
||||||
startOffset, endOffset, type, symbol, descriptor, descriptor.typeParametersCount,
|
startOffset, endOffset, type, symbol, symbol.descriptor.typeParametersCount, symbol.descriptor.valueParameters.size,
|
||||||
descriptor.valueParameters.size, origin, superQualifierSymbol
|
origin, superQualifierSymbol
|
||||||
)
|
)
|
||||||
|
|
||||||
constructor(
|
constructor(
|
||||||
@@ -70,13 +69,12 @@ class IrCallImpl(
|
|||||||
endOffset: Int,
|
endOffset: Int,
|
||||||
type: IrType,
|
type: IrType,
|
||||||
symbol: IrFunctionSymbol,
|
symbol: IrFunctionSymbol,
|
||||||
descriptor: FunctionDescriptor,
|
|
||||||
typeArgumentsCount: Int,
|
typeArgumentsCount: Int,
|
||||||
origin: IrStatementOrigin? = null,
|
origin: IrStatementOrigin? = null,
|
||||||
superQualifierSymbol: IrClassSymbol? = null
|
superQualifierSymbol: IrClassSymbol? = null
|
||||||
) : this(
|
) : this(
|
||||||
startOffset, endOffset, type, symbol, descriptor, typeArgumentsCount,
|
startOffset, endOffset, type, symbol, typeArgumentsCount, symbol.descriptor.valueParameters.size,
|
||||||
descriptor.valueParameters.size, origin, superQualifierSymbol
|
origin, superQualifierSymbol
|
||||||
)
|
)
|
||||||
|
|
||||||
override fun <R, D> accept(visitor: IrElementVisitor<R, D>, data: D): R =
|
override fun <R, D> accept(visitor: IrElementVisitor<R, D>, data: D): R =
|
||||||
|
|||||||
+2
-3
@@ -19,7 +19,6 @@ class IrConstructorCallImpl(
|
|||||||
endOffset: Int,
|
endOffset: Int,
|
||||||
type: IrType,
|
type: IrType,
|
||||||
override val symbol: IrConstructorSymbol,
|
override val symbol: IrConstructorSymbol,
|
||||||
override val descriptor: ClassConstructorDescriptor,
|
|
||||||
typeArgumentsCount: Int,
|
typeArgumentsCount: Int,
|
||||||
override val constructorTypeArgumentsCount: Int,
|
override val constructorTypeArgumentsCount: Int,
|
||||||
valueArgumentsCount: Int,
|
valueArgumentsCount: Int,
|
||||||
@@ -31,6 +30,8 @@ class IrConstructorCallImpl(
|
|||||||
override fun <R, D> accept(visitor: IrElementVisitor<R, D>, data: D): R =
|
override fun <R, D> accept(visitor: IrElementVisitor<R, D>, data: D): R =
|
||||||
visitor.visitConstructorCall(this, data)
|
visitor.visitConstructorCall(this, data)
|
||||||
|
|
||||||
|
override val descriptor: ClassConstructorDescriptor get() = symbol.descriptor
|
||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
fun fromSubstitutedDescriptor(
|
fun fromSubstitutedDescriptor(
|
||||||
startOffset: Int,
|
startOffset: Int,
|
||||||
@@ -48,7 +49,6 @@ class IrConstructorCallImpl(
|
|||||||
startOffset, endOffset,
|
startOffset, endOffset,
|
||||||
type,
|
type,
|
||||||
constructorSymbol,
|
constructorSymbol,
|
||||||
constructorDescriptor,
|
|
||||||
totalTypeParametersCount,
|
totalTypeParametersCount,
|
||||||
totalTypeParametersCount - classTypeParametersCount,
|
totalTypeParametersCount - classTypeParametersCount,
|
||||||
valueParametersCount,
|
valueParametersCount,
|
||||||
@@ -83,7 +83,6 @@ class IrConstructorCallImpl(
|
|||||||
startOffset, endOffset,
|
startOffset, endOffset,
|
||||||
type,
|
type,
|
||||||
constructorSymbol,
|
constructorSymbol,
|
||||||
constructorSymbol.descriptor,
|
|
||||||
totalTypeParametersCount,
|
totalTypeParametersCount,
|
||||||
constructorTypeParametersCount,
|
constructorTypeParametersCount,
|
||||||
valueParametersCount,
|
valueParametersCount,
|
||||||
|
|||||||
+4
-12
@@ -28,7 +28,6 @@ class IrDelegatingConstructorCallImpl(
|
|||||||
endOffset: Int,
|
endOffset: Int,
|
||||||
type: IrType,
|
type: IrType,
|
||||||
override val symbol: IrConstructorSymbol,
|
override val symbol: IrConstructorSymbol,
|
||||||
override val descriptor: ClassConstructorDescriptor,
|
|
||||||
typeArgumentsCount: Int,
|
typeArgumentsCount: Int,
|
||||||
valueArgumentsCount: Int
|
valueArgumentsCount: Int
|
||||||
) :
|
) :
|
||||||
@@ -41,29 +40,22 @@ class IrDelegatingConstructorCallImpl(
|
|||||||
),
|
),
|
||||||
IrDelegatingConstructorCall {
|
IrDelegatingConstructorCall {
|
||||||
|
|
||||||
constructor(
|
|
||||||
startOffset: Int,
|
|
||||||
endOffset: Int,
|
|
||||||
type: IrType,
|
|
||||||
symbol: IrConstructorSymbol,
|
|
||||||
descriptor: ClassConstructorDescriptor
|
|
||||||
) : this(startOffset, endOffset, type, symbol, descriptor, descriptor.typeParametersCount, descriptor.valueParameters.size)
|
|
||||||
|
|
||||||
constructor(
|
constructor(
|
||||||
startOffset: Int,
|
startOffset: Int,
|
||||||
endOffset: Int,
|
endOffset: Int,
|
||||||
type: IrType,
|
type: IrType,
|
||||||
symbol: IrConstructorSymbol
|
symbol: IrConstructorSymbol
|
||||||
) : this(startOffset, endOffset, type, symbol, symbol.descriptor)
|
) : this(startOffset, endOffset, type, symbol, symbol.descriptor.typeParametersCount, symbol.descriptor.valueParameters.size)
|
||||||
|
|
||||||
constructor(
|
constructor(
|
||||||
startOffset: Int,
|
startOffset: Int,
|
||||||
endOffset: Int,
|
endOffset: Int,
|
||||||
type: IrType,
|
type: IrType,
|
||||||
symbol: IrConstructorSymbol,
|
symbol: IrConstructorSymbol,
|
||||||
descriptor: ClassConstructorDescriptor,
|
|
||||||
typeArgumentsCount: Int
|
typeArgumentsCount: Int
|
||||||
) : this(startOffset, endOffset, type, symbol, descriptor, typeArgumentsCount, descriptor.valueParameters.size)
|
) : this(startOffset, endOffset, type, symbol, typeArgumentsCount, symbol.descriptor.valueParameters.size)
|
||||||
|
|
||||||
|
override val descriptor: ClassConstructorDescriptor get() = symbol.descriptor
|
||||||
|
|
||||||
override fun <R, D> accept(visitor: IrElementVisitor<R, D>, data: D): R {
|
override fun <R, D> accept(visitor: IrElementVisitor<R, D>, data: D): R {
|
||||||
return visitor.visitDelegatingConstructorCall(this, data)
|
return visitor.visitDelegatingConstructorCall(this, data)
|
||||||
|
|||||||
+3
-3
@@ -28,7 +28,6 @@ class IrFunctionReferenceImpl(
|
|||||||
endOffset: Int,
|
endOffset: Int,
|
||||||
type: IrType,
|
type: IrType,
|
||||||
override val symbol: IrFunctionSymbol,
|
override val symbol: IrFunctionSymbol,
|
||||||
override val descriptor: FunctionDescriptor,
|
|
||||||
typeArgumentsCount: Int,
|
typeArgumentsCount: Int,
|
||||||
valueArgumentsCount: Int,
|
valueArgumentsCount: Int,
|
||||||
origin: IrStatementOrigin? = null
|
origin: IrStatementOrigin? = null
|
||||||
@@ -48,10 +47,11 @@ class IrFunctionReferenceImpl(
|
|||||||
endOffset: Int,
|
endOffset: Int,
|
||||||
type: IrType,
|
type: IrType,
|
||||||
symbol: IrFunctionSymbol,
|
symbol: IrFunctionSymbol,
|
||||||
descriptor: FunctionDescriptor,
|
|
||||||
typeArgumentsCount: Int,
|
typeArgumentsCount: Int,
|
||||||
origin: IrStatementOrigin? = null
|
origin: IrStatementOrigin? = null
|
||||||
) : this(startOffset, endOffset, type, symbol, descriptor, typeArgumentsCount, descriptor.valueParameters.size, origin)
|
) : this(startOffset, endOffset, type, symbol, typeArgumentsCount, symbol.descriptor.valueParameters.size, origin)
|
||||||
|
|
||||||
|
override val descriptor: FunctionDescriptor get() = symbol.descriptor
|
||||||
|
|
||||||
override fun <R, D> accept(visitor: IrElementVisitor<R, D>, data: D): R =
|
override fun <R, D> accept(visitor: IrElementVisitor<R, D>, data: D): R =
|
||||||
visitor.visitFunctionReference(this, data)
|
visitor.visitFunctionReference(this, data)
|
||||||
|
|||||||
+2
-17
@@ -31,7 +31,6 @@ class IrPropertyReferenceImpl(
|
|||||||
endOffset: Int,
|
endOffset: Int,
|
||||||
type: IrType,
|
type: IrType,
|
||||||
override val symbol: IrPropertySymbol,
|
override val symbol: IrPropertySymbol,
|
||||||
override val descriptor: PropertyDescriptor,
|
|
||||||
typeArgumentsCount: Int,
|
typeArgumentsCount: Int,
|
||||||
override val field: IrFieldSymbol?,
|
override val field: IrFieldSymbol?,
|
||||||
override val getter: IrSimpleFunctionSymbol?,
|
override val getter: IrSimpleFunctionSymbol?,
|
||||||
@@ -41,22 +40,6 @@ class IrPropertyReferenceImpl(
|
|||||||
IrNoArgumentsCallableReferenceBase(startOffset, endOffset, type, typeArgumentsCount, origin),
|
IrNoArgumentsCallableReferenceBase(startOffset, endOffset, type, typeArgumentsCount, origin),
|
||||||
IrPropertyReference {
|
IrPropertyReference {
|
||||||
|
|
||||||
constructor(
|
|
||||||
startOffset: Int,
|
|
||||||
endOffset: Int,
|
|
||||||
type: IrType,
|
|
||||||
symbol: IrPropertySymbol,
|
|
||||||
typeArgumentsCount: Int,
|
|
||||||
field: IrFieldSymbol?,
|
|
||||||
getter: IrSimpleFunctionSymbol?,
|
|
||||||
setter: IrSimpleFunctionSymbol?,
|
|
||||||
origin: IrStatementOrigin? = null
|
|
||||||
) : this(
|
|
||||||
startOffset, endOffset, type,
|
|
||||||
symbol, symbol.descriptor,
|
|
||||||
typeArgumentsCount, field, getter, setter, origin
|
|
||||||
)
|
|
||||||
|
|
||||||
@Deprecated(message = "Don't use descriptor-based API for IrPropertyReference", level = DeprecationLevel.WARNING)
|
@Deprecated(message = "Don't use descriptor-based API for IrPropertyReference", level = DeprecationLevel.WARNING)
|
||||||
constructor(
|
constructor(
|
||||||
startOffset: Int,
|
startOffset: Int,
|
||||||
@@ -74,6 +57,8 @@ class IrPropertyReferenceImpl(
|
|||||||
typeArgumentsCount, field, getter, setter, origin
|
typeArgumentsCount, field, getter, setter, origin
|
||||||
)
|
)
|
||||||
|
|
||||||
|
override val descriptor: PropertyDescriptor get() = symbol.descriptor
|
||||||
|
|
||||||
override fun <R, D> accept(visitor: IrElementVisitor<R, D>, data: D): R =
|
override fun <R, D> accept(visitor: IrElementVisitor<R, D>, data: D): R =
|
||||||
visitor.visitPropertyReference(this, data)
|
visitor.visitPropertyReference(this, data)
|
||||||
}
|
}
|
||||||
@@ -495,7 +495,6 @@ open class DeepCopyIrTreeWithSymbols(
|
|||||||
expression.startOffset, expression.endOffset,
|
expression.startOffset, expression.endOffset,
|
||||||
expression.type.remapType(),
|
expression.type.remapType(),
|
||||||
constructorSymbol,
|
constructorSymbol,
|
||||||
constructorSymbol.descriptor,
|
|
||||||
expression.typeArgumentsCount,
|
expression.typeArgumentsCount,
|
||||||
expression.constructorTypeArgumentsCount,
|
expression.constructorTypeArgumentsCount,
|
||||||
expression.valueArgumentsCount,
|
expression.valueArgumentsCount,
|
||||||
@@ -521,7 +520,6 @@ open class DeepCopyIrTreeWithSymbols(
|
|||||||
expression.startOffset, expression.endOffset,
|
expression.startOffset, expression.endOffset,
|
||||||
expression.type.remapType(),
|
expression.type.remapType(),
|
||||||
newCallee,
|
newCallee,
|
||||||
newCallee.descriptor,
|
|
||||||
expression.typeArgumentsCount,
|
expression.typeArgumentsCount,
|
||||||
expression.valueArgumentsCount,
|
expression.valueArgumentsCount,
|
||||||
mapStatementOrigin(expression.origin),
|
mapStatementOrigin(expression.origin),
|
||||||
@@ -550,7 +548,6 @@ open class DeepCopyIrTreeWithSymbols(
|
|||||||
expression.startOffset, expression.endOffset,
|
expression.startOffset, expression.endOffset,
|
||||||
expression.type.remapType(),
|
expression.type.remapType(),
|
||||||
newConstructor,
|
newConstructor,
|
||||||
newConstructor.descriptor,
|
|
||||||
expression.typeArgumentsCount
|
expression.typeArgumentsCount
|
||||||
).apply {
|
).apply {
|
||||||
copyRemappedTypeArgumentsFrom(expression)
|
copyRemappedTypeArgumentsFrom(expression)
|
||||||
@@ -584,7 +581,6 @@ open class DeepCopyIrTreeWithSymbols(
|
|||||||
expression.startOffset, expression.endOffset,
|
expression.startOffset, expression.endOffset,
|
||||||
expression.type.remapType(),
|
expression.type.remapType(),
|
||||||
symbol,
|
symbol,
|
||||||
symbol.descriptor,
|
|
||||||
expression.typeArgumentsCount,
|
expression.typeArgumentsCount,
|
||||||
expression.valueArgumentsCount,
|
expression.valueArgumentsCount,
|
||||||
mapStatementOrigin(expression.origin)
|
mapStatementOrigin(expression.origin)
|
||||||
|
|||||||
@@ -482,7 +482,6 @@ fun irConstructorCall(
|
|||||||
endOffset,
|
endOffset,
|
||||||
type,
|
type,
|
||||||
newSymbol,
|
newSymbol,
|
||||||
newSymbol.descriptor,
|
|
||||||
typeArgumentsCount,
|
typeArgumentsCount,
|
||||||
0,
|
0,
|
||||||
call.valueArgumentsCount,
|
call.valueArgumentsCount,
|
||||||
@@ -521,7 +520,6 @@ fun irCall(
|
|||||||
endOffset,
|
endOffset,
|
||||||
type,
|
type,
|
||||||
newSymbol,
|
newSymbol,
|
||||||
newSymbol.descriptor,
|
|
||||||
typeArgumentsCount,
|
typeArgumentsCount,
|
||||||
origin
|
origin
|
||||||
).apply {
|
).apply {
|
||||||
|
|||||||
+2
-6
@@ -350,8 +350,7 @@ abstract class IrFileDeserializer(
|
|||||||
val symbol = deserializeIrSymbol(proto.symbol) as IrConstructorSymbol
|
val symbol = deserializeIrSymbol(proto.symbol) as IrConstructorSymbol
|
||||||
return IrConstructorCallImpl(
|
return IrConstructorCallImpl(
|
||||||
start, end, type,
|
start, end, type,
|
||||||
symbol, symbol.descriptor,
|
symbol, typeArgumentsCount = proto.memberAccess.typeArguments.typeArgumentCount,
|
||||||
typeArgumentsCount = proto.memberAccess.typeArguments.typeArgumentCount,
|
|
||||||
constructorTypeArgumentsCount = proto.constructorTypeArgumentsCount,
|
constructorTypeArgumentsCount = proto.constructorTypeArgumentsCount,
|
||||||
valueArgumentsCount = proto.memberAccess.valueArgumentCount
|
valueArgumentsCount = proto.memberAccess.valueArgumentCount
|
||||||
).also {
|
).also {
|
||||||
@@ -372,8 +371,7 @@ abstract class IrFileDeserializer(
|
|||||||
// TODO: implement the last three args here.
|
// TODO: implement the last three args here.
|
||||||
IrCallImpl(
|
IrCallImpl(
|
||||||
start, end, type,
|
start, end, type,
|
||||||
symbol, symbol.descriptor,
|
symbol, proto.memberAccess.typeArguments.typeArgumentCount,
|
||||||
proto.memberAccess.typeArguments.typeArgumentCount,
|
|
||||||
proto.memberAccess.valueArgumentList.size,
|
proto.memberAccess.valueArgumentList.size,
|
||||||
origin,
|
origin,
|
||||||
superSymbol
|
superSymbol
|
||||||
@@ -404,7 +402,6 @@ abstract class IrFileDeserializer(
|
|||||||
end,
|
end,
|
||||||
builtIns.unitType,
|
builtIns.unitType,
|
||||||
symbol,
|
symbol,
|
||||||
symbol.descriptor,
|
|
||||||
proto.memberAccess.typeArguments.typeArgumentCount,
|
proto.memberAccess.typeArguments.typeArgumentCount,
|
||||||
proto.memberAccess.valueArgumentList.size
|
proto.memberAccess.valueArgumentList.size
|
||||||
)
|
)
|
||||||
@@ -457,7 +454,6 @@ abstract class IrFileDeserializer(
|
|||||||
end,
|
end,
|
||||||
type,
|
type,
|
||||||
symbol,
|
symbol,
|
||||||
symbol.descriptor,
|
|
||||||
proto.memberAccess.typeArguments.typeArgumentCount,
|
proto.memberAccess.typeArguments.typeArgumentCount,
|
||||||
proto.memberAccess.valueArgumentCount,
|
proto.memberAccess.valueArgumentCount,
|
||||||
origin
|
origin
|
||||||
|
|||||||
+1
-2
@@ -226,8 +226,7 @@ interface IrBuilderExtension {
|
|||||||
+IrDelegatingConstructorCallImpl(
|
+IrDelegatingConstructorCallImpl(
|
||||||
startOffset, endOffset,
|
startOffset, endOffset,
|
||||||
compilerContext.irBuiltIns.unitType,
|
compilerContext.irBuiltIns.unitType,
|
||||||
compilerContext.externalSymbols.referenceConstructor(anyConstructor),
|
compilerContext.externalSymbols.referenceConstructor(anyConstructor)
|
||||||
anyConstructor
|
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+2
-4
@@ -119,8 +119,7 @@ class SerializableIrGenerator(
|
|||||||
startOffset,
|
startOffset,
|
||||||
endOffset,
|
endOffset,
|
||||||
compilerContext.irBuiltIns.unitType,
|
compilerContext.irBuiltIns.unitType,
|
||||||
ctorRef,
|
ctorRef
|
||||||
suitableCtor
|
|
||||||
)
|
)
|
||||||
call.insertTypeArgumentsForSuperClass(superClass)
|
call.insertTypeArgumentsForSuperClass(superClass)
|
||||||
+call
|
+call
|
||||||
@@ -152,8 +151,7 @@ class SerializableIrGenerator(
|
|||||||
startOffset,
|
startOffset,
|
||||||
endOffset,
|
endOffset,
|
||||||
compilerContext.irBuiltIns.unitType,
|
compilerContext.irBuiltIns.unitType,
|
||||||
superCtorRef,
|
superCtorRef
|
||||||
superCtorRef.owner.descriptor
|
|
||||||
)
|
)
|
||||||
arguments.forEachIndexed { index, parameter -> call.putValueArgument(index, irGet(parameter)) }
|
arguments.forEachIndexed { index, parameter -> call.putValueArgument(index, irGet(parameter)) }
|
||||||
call.insertTypeArgumentsForSuperClass(superClass)
|
call.insertTypeArgumentsForSuperClass(superClass)
|
||||||
|
|||||||
Reference in New Issue
Block a user