diff --git a/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/ir/IrUtils.kt b/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/ir/IrUtils.kt index 4bc065f8b19..01e5ac7cce1 100644 --- a/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/ir/IrUtils.kt +++ b/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/ir/IrUtils.kt @@ -27,6 +27,7 @@ import org.jetbrains.kotlin.ir.overrides.IrOverridingUtil import org.jetbrains.kotlin.ir.symbols.IrSimpleFunctionSymbol import org.jetbrains.kotlin.ir.symbols.IrSymbol import org.jetbrains.kotlin.ir.symbols.impl.IrPropertySymbolImpl +import org.jetbrains.kotlin.ir.symbols.IrTypeParameterSymbol import org.jetbrains.kotlin.ir.symbols.impl.IrSimpleFunctionSymbolImpl import org.jetbrains.kotlin.ir.symbols.impl.IrValueParameterSymbolImpl import org.jetbrains.kotlin.ir.types.* @@ -163,14 +164,16 @@ fun IrTypeParameter.copyToWithoutSuperTypes( this.index = index } -fun IrFunction.copyReceiverParametersFrom(from: IrFunction) { +fun IrFunction.copyReceiverParametersFrom(from: IrFunction, substitutionMap: Map) { dispatchReceiverParameter = from.dispatchReceiverParameter?.run { val newDescriptor = WrappedReceiverParameterDescriptor() factory.createValueParameter( startOffset, endOffset, origin, IrValueParameterSymbolImpl(newDescriptor), - name, - index, type, varargElementType, isCrossinline, isNoinline + name, index, + type.substitute(substitutionMap), + varargElementType?.substitute(substitutionMap), + isCrossinline, isNoinline ).also { parameter -> parameter.parent = this@copyReceiverParametersFrom newDescriptor.bind(this) @@ -179,16 +182,19 @@ fun IrFunction.copyReceiverParametersFrom(from: IrFunction) { extensionReceiverParameter = from.extensionReceiverParameter?.copyTo(this) } -fun IrFunction.copyValueParametersFrom(from: IrFunction) { - copyReceiverParametersFrom(from) +fun IrFunction.copyValueParametersFrom(from: IrFunction, substitutionMap: Map) { + copyReceiverParametersFrom(from, substitutionMap) val shift = valueParameters.size - valueParameters += from.valueParameters.map { it.copyTo(this, index = it.index + shift) } + valueParameters += from.valueParameters.map { + it.copyTo(this, index = it.index + shift, type = it.type.substitute(substitutionMap)) + } } fun IrFunction.copyParameterDeclarationsFrom(from: IrFunction) { assert(typeParameters.isEmpty()) copyTypeParametersFrom(from) - copyValueParametersFrom(from) + val substitutionMap = makeTypeParameterSubstitutionMap(from, this) + copyValueParametersFrom(from, substitutionMap) } fun IrTypeParametersContainer.copyTypeParameters( @@ -231,6 +237,16 @@ fun IrMutableAnnotationContainer.copyAnnotationsFrom(source: IrAnnotationContain annotations += source.annotations.map { it.deepCopyWithSymbols(this as? IrDeclarationParent) } } +fun makeTypeParameterSubstitutionMap( + original: IrTypeParametersContainer, + transformed: IrTypeParametersContainer +): Map = + original.typeParameters + .map { it.symbol } + .zip(transformed.typeParameters.map { it.defaultType }) + .toMap() + + // Copy value parameters, dispatch receiver, and extension receiver from source to value parameters of this function. // Type of dispatch receiver defaults to source's dispatch receiver. It is overridable in case the new function and the old one are used in // different contexts and expect different type of dispatch receivers. The overriding type should be assign compatible to the old type. diff --git a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/lower/AddContinuationLowering.kt b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/lower/AddContinuationLowering.kt index e097fe6dcf8..489d4131b10 100644 --- a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/lower/AddContinuationLowering.kt +++ b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/lower/AddContinuationLowering.kt @@ -382,7 +382,8 @@ private fun IrFunction.createSuspendFunctionStub(context: JvmBackendContext): Ir function.copyAttributes(this) function.copyTypeParametersFrom(this) - function.copyReceiverParametersFrom(this) + val substitutionMap = makeTypeParameterSubstitutionMap(this, function) + function.copyReceiverParametersFrom(this, substitutionMap) if (origin != JvmLoweredDeclarationOrigin.DEFAULT_IMPLS_BRIDGE) { function.overriddenSymbols += @@ -393,11 +394,15 @@ private fun IrFunction.createSuspendFunctionStub(context: JvmBackendContext): Ir // TODO: It would be nice if AddContinuationLowering could insert the continuation argument before default stub generation. val index = valueParameters.firstOrNull { it.origin == IrDeclarationOrigin.MASK_FOR_DEFAULT_FUNCTION }?.index ?: valueParameters.size - function.valueParameters += valueParameters.take(index).map { it.copyTo(function, index = it.index) } + function.valueParameters += valueParameters.take(index).map { + it.copyTo(function, index = it.index, type = it.type.substitute(substitutionMap)) + } function.addValueParameter( - SUSPEND_FUNCTION_COMPLETION_PARAMETER_NAME, continuationType(context), JvmLoweredDeclarationOrigin.CONTINUATION_CLASS + SUSPEND_FUNCTION_COMPLETION_PARAMETER_NAME, continuationType(context).substitute(substitutionMap), JvmLoweredDeclarationOrigin.CONTINUATION_CLASS ) - function.valueParameters += valueParameters.drop(index).map { it.copyTo(function, index = it.index + 1) } + function.valueParameters += valueParameters.drop(index).map { + it.copyTo(function, index = it.index + 1, type = it.type.substitute(substitutionMap)) + } } } diff --git a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/lower/SuspendLambdaLowering.kt b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/lower/SuspendLambdaLowering.kt index cd8a5d8afe8..a634a30136f 100644 --- a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/lower/SuspendLambdaLowering.kt +++ b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/lower/SuspendLambdaLowering.kt @@ -74,12 +74,23 @@ private fun IrFunction.capturesCrossinline(): Boolean { internal abstract class SuspendLoweringUtils(protected val context: JvmBackendContext) { protected fun IrClass.addFunctionOverride( - function: IrSimpleFunction, startOffset: Int = UNDEFINED_OFFSET, endOffset: Int = UNDEFINED_OFFSET - ): IrSimpleFunction = - addFunction(function.name.asString(), function.returnType, startOffset = startOffset, endOffset = endOffset).apply { + function: IrSimpleFunction, + startOffset: Int = UNDEFINED_OFFSET, + endOffset: Int = UNDEFINED_OFFSET, + ): IrSimpleFunction { + val overriddenType = superTypes.single { it.classifierOrFail == function.parentAsClass.symbol } + val typeSubstitution = (overriddenType.classifierOrFail.owner as IrClass).typeParameters + .map { it.symbol } + .zip((overriddenType as IrSimpleType).arguments.map { (it as IrTypeProjection).type }) // No star projections in this lowering + .toMap() + return addFunction( + function.name.asString(), function.returnType.substitute(typeSubstitution), + startOffset = startOffset, endOffset = endOffset + ).apply { overriddenSymbols = listOf(function.symbol) - valueParameters = function.valueParameters.map { it.copyTo(this) } + valueParameters = function.valueParameters.map { it.copyTo(this, type = it.type.substitute(typeSubstitution)) } } + } protected fun IrClass.addFunctionOverride( function: IrSimpleFunction, @@ -178,7 +189,7 @@ private class SuspendLambdaLowering(context: JvmBackendContext) : SuspendLowerin val createToOverride = suspendLambda.symbol.functions.singleOrNull { it.owner.valueParameters.size == arity + 1 && it.owner.name.asString() == "create" } - val invokeSuspend = addInvokeSuspendForLambda(function, parametersFields) + val invokeSuspend = addInvokeSuspendForLambda(function, suspendLambda, parametersFields) if (function.capturesCrossinline()) { addInvokeSuspendForInlineForLambda(invokeSuspend) } @@ -192,11 +203,11 @@ private class SuspendLambdaLowering(context: JvmBackendContext) : SuspendLowerin context.suspendLambdaToOriginalFunctionMap[attributeOwnerId as IrFunctionReference] = function } - private fun IrClass.addInvokeSuspendForLambda(irFunction: IrFunction, fields: List): IrSimpleFunction { - val superMethod = context.ir.symbols.suspendLambdaClass.functions.single { - it.owner.name.asString() == INVOKE_SUSPEND_METHOD_NAME && it.owner.valueParameters.size == 1 && - it.owner.valueParameters[0].type.isKotlinResult() - }.owner + private fun IrClass.addInvokeSuspendForLambda(irFunction: IrFunction, suspendLambda: IrClass, fields: List): IrSimpleFunction { + val superMethod = suspendLambda.functions.single { + it.name.asString() == INVOKE_SUSPEND_METHOD_NAME && it.valueParameters.size == 1 && + it.valueParameters[0].type.isKotlinResult() + } return addFunctionOverride(superMethod, irFunction.startOffset, irFunction.endOffset).apply { body = irFunction.moveBodyTo(this, mapOf())?.transform(object : IrElementTransformerVoid() { override fun visitGetValue(expression: IrGetValue): IrExpression { diff --git a/compiler/testData/codegen/box/coroutines/bridges/lambdaWithLongReceiver_ir.txt b/compiler/testData/codegen/box/coroutines/bridges/lambdaWithLongReceiver_ir.txt index 597beb0ed1e..227e622dfa9 100644 --- a/compiler/testData/codegen/box/coroutines/bridges/lambdaWithLongReceiver_ir.txt +++ b/compiler/testData/codegen/box/coroutines/bridges/lambdaWithLongReceiver_ir.txt @@ -9,7 +9,8 @@ final class LambdaWithLongReceiverKt$box$1$1 { inner (anonymous) class LambdaWithLongReceiverKt$box$1$1 method (p0: kotlin.coroutines.Continuation): void public final @org.jetbrains.annotations.NotNull method create(@org.jetbrains.annotations.Nullable p0: java.lang.Object, @org.jetbrains.annotations.NotNull p1: kotlin.coroutines.Continuation): kotlin.coroutines.Continuation - public final method invoke(p0: java.lang.Object, p1: java.lang.Object): java.lang.Object + public synthetic bridge method invoke(p0: java.lang.Object, p1: java.lang.Object): java.lang.Object + public final @org.jetbrains.annotations.Nullable method invoke(p0: long, @org.jetbrains.annotations.Nullable p1: kotlin.coroutines.Continuation): java.lang.Object public final @org.jetbrains.annotations.Nullable method invokeSuspend(@org.jetbrains.annotations.NotNull p0: java.lang.Object): java.lang.Object } @@ -25,7 +26,8 @@ final class LambdaWithLongReceiverKt$box$1 { inner (anonymous) class LambdaWithLongReceiverKt$box$1$1 method (p0: kotlin.jvm.internal.Ref$ObjectRef, p1: kotlin.coroutines.Continuation): void public final @org.jetbrains.annotations.NotNull method create(@org.jetbrains.annotations.NotNull p0: kotlin.coroutines.Continuation): kotlin.coroutines.Continuation - public final method invoke(p0: java.lang.Object): java.lang.Object + public final @org.jetbrains.annotations.Nullable method invoke(@org.jetbrains.annotations.Nullable p0: kotlin.coroutines.Continuation): java.lang.Object + public synthetic bridge method invoke(p0: java.lang.Object): java.lang.Object public final @org.jetbrains.annotations.Nullable method invokeSuspend(@org.jetbrains.annotations.NotNull p0: java.lang.Object): java.lang.Object } diff --git a/compiler/testData/codegen/box/coroutines/bridges/lambdaWithMultipleParameters_ir.txt b/compiler/testData/codegen/box/coroutines/bridges/lambdaWithMultipleParameters_ir.txt index bbadae4c427..f76c0eba8a5 100644 --- a/compiler/testData/codegen/box/coroutines/bridges/lambdaWithMultipleParameters_ir.txt +++ b/compiler/testData/codegen/box/coroutines/bridges/lambdaWithMultipleParameters_ir.txt @@ -13,7 +13,8 @@ final class LambdaWithMultipleParametersKt$box$1$1 { inner (anonymous) class LambdaWithMultipleParametersKt$box$1 inner (anonymous) class LambdaWithMultipleParametersKt$box$1$1 method (p0: kotlin.coroutines.Continuation): void - public final method invoke(p0: java.lang.Object, p1: java.lang.Object, p2: java.lang.Object, p3: java.lang.Object, p4: java.lang.Object, p5: java.lang.Object, p6: java.lang.Object): java.lang.Object + public final @org.jetbrains.annotations.Nullable method invoke(@org.jetbrains.annotations.NotNull p0: java.lang.String, p1: long, p2: long, p3: long, p4: long, p5: long, @org.jetbrains.annotations.Nullable p6: kotlin.coroutines.Continuation): java.lang.Object + public synthetic bridge method invoke(p0: java.lang.Object, p1: java.lang.Object, p2: java.lang.Object, p3: java.lang.Object, p4: java.lang.Object, p5: java.lang.Object, p6: java.lang.Object): java.lang.Object public final @org.jetbrains.annotations.Nullable method invokeSuspend(@org.jetbrains.annotations.NotNull p0: java.lang.Object): java.lang.Object } @@ -29,7 +30,8 @@ final class LambdaWithMultipleParametersKt$box$1 { inner (anonymous) class LambdaWithMultipleParametersKt$box$1$1 method (p0: kotlin.jvm.internal.Ref$ObjectRef, p1: kotlin.coroutines.Continuation): void public final @org.jetbrains.annotations.NotNull method create(@org.jetbrains.annotations.NotNull p0: kotlin.coroutines.Continuation): kotlin.coroutines.Continuation - public final method invoke(p0: java.lang.Object): java.lang.Object + public final @org.jetbrains.annotations.Nullable method invoke(@org.jetbrains.annotations.Nullable p0: kotlin.coroutines.Continuation): java.lang.Object + public synthetic bridge method invoke(p0: java.lang.Object): java.lang.Object public final @org.jetbrains.annotations.Nullable method invokeSuspend(@org.jetbrains.annotations.NotNull p0: java.lang.Object): java.lang.Object } diff --git a/compiler/testData/codegen/box/coroutines/tailCallOptimizations/crossinline_ir.txt b/compiler/testData/codegen/box/coroutines/tailCallOptimizations/crossinline_ir.txt index f6d71856190..cef676220eb 100644 --- a/compiler/testData/codegen/box/coroutines/tailCallOptimizations/crossinline_ir.txt +++ b/compiler/testData/codegen/box/coroutines/tailCallOptimizations/crossinline_ir.txt @@ -71,7 +71,8 @@ final class CrossinlineKt$box$1 { inner (anonymous) class CrossinlineKt$box$1 method (p0: kotlin.jvm.internal.Ref$IntRef, p1: kotlin.coroutines.Continuation): void public final @org.jetbrains.annotations.NotNull method create(@org.jetbrains.annotations.NotNull p0: kotlin.coroutines.Continuation): kotlin.coroutines.Continuation - public final method invoke(p0: java.lang.Object): java.lang.Object + public final @org.jetbrains.annotations.Nullable method invoke(@org.jetbrains.annotations.Nullable p0: kotlin.coroutines.Continuation): java.lang.Object + public synthetic bridge method invoke(p0: java.lang.Object): java.lang.Object public final @org.jetbrains.annotations.Nullable method invokeSuspend(@org.jetbrains.annotations.NotNull p0: java.lang.Object): java.lang.Object } diff --git a/compiler/testData/codegen/box/coroutines/tailCallOptimizations/inlineWithoutStateMachine_ir.txt b/compiler/testData/codegen/box/coroutines/tailCallOptimizations/inlineWithoutStateMachine_ir.txt index b74d8ceca12..2f4fc2f0893 100644 --- a/compiler/testData/codegen/box/coroutines/tailCallOptimizations/inlineWithoutStateMachine_ir.txt +++ b/compiler/testData/codegen/box/coroutines/tailCallOptimizations/inlineWithoutStateMachine_ir.txt @@ -10,7 +10,8 @@ final class InlineWithoutStateMachineKt$box$1 { inner (anonymous) class InlineWithoutStateMachineKt$box$1 method (p0: kotlin.jvm.internal.Ref$ObjectRef, p1: kotlin.coroutines.Continuation): void public final @org.jetbrains.annotations.NotNull method create(@org.jetbrains.annotations.NotNull p0: kotlin.coroutines.Continuation): kotlin.coroutines.Continuation - public final method invoke(p0: java.lang.Object): java.lang.Object + public final @org.jetbrains.annotations.Nullable method invoke(@org.jetbrains.annotations.Nullable p0: kotlin.coroutines.Continuation): java.lang.Object + public synthetic bridge method invoke(p0: java.lang.Object): java.lang.Object public final @org.jetbrains.annotations.Nullable method invokeSuspend(@org.jetbrains.annotations.NotNull p0: java.lang.Object): java.lang.Object } diff --git a/compiler/testData/codegen/box/coroutines/tailCallOptimizations/innerObjectRetransformation_ir.txt b/compiler/testData/codegen/box/coroutines/tailCallOptimizations/innerObjectRetransformation_ir.txt index 9174c1a691c..ace972e809d 100644 --- a/compiler/testData/codegen/box/coroutines/tailCallOptimizations/innerObjectRetransformation_ir.txt +++ b/compiler/testData/codegen/box/coroutines/tailCallOptimizations/innerObjectRetransformation_ir.txt @@ -19,7 +19,8 @@ final class flow/InnerObjectRetransformationKt$box$1 { inner (anonymous) class flow/InnerObjectRetransformationKt$box$1 method (p0: kotlin.coroutines.Continuation): void public final @org.jetbrains.annotations.NotNull method create(@org.jetbrains.annotations.NotNull p0: kotlin.coroutines.Continuation): kotlin.coroutines.Continuation - public final method invoke(p0: java.lang.Object): java.lang.Object + public final @org.jetbrains.annotations.Nullable method invoke(@org.jetbrains.annotations.Nullable p0: kotlin.coroutines.Continuation): java.lang.Object + public synthetic bridge method invoke(p0: java.lang.Object): java.lang.Object public final @org.jetbrains.annotations.Nullable method invokeSuspend(@org.jetbrains.annotations.NotNull p0: java.lang.Object): java.lang.Object } diff --git a/compiler/testData/codegen/box/coroutines/tailCallOptimizations/unit/override5_ir.txt b/compiler/testData/codegen/box/coroutines/tailCallOptimizations/unit/override5_ir.txt index 900858cde0a..7e09a577788 100644 --- a/compiler/testData/codegen/box/coroutines/tailCallOptimizations/unit/override5_ir.txt +++ b/compiler/testData/codegen/box/coroutines/tailCallOptimizations/unit/override5_ir.txt @@ -23,7 +23,8 @@ final class Override5Kt$box$1 { inner (anonymous) class Override5Kt$box$1 method (p0: kotlin.coroutines.Continuation): void public final @org.jetbrains.annotations.NotNull method create(@org.jetbrains.annotations.NotNull p0: kotlin.coroutines.Continuation): kotlin.coroutines.Continuation - public final method invoke(p0: java.lang.Object): java.lang.Object + public final @org.jetbrains.annotations.Nullable method invoke(@org.jetbrains.annotations.Nullable p0: kotlin.coroutines.Continuation): java.lang.Object + public synthetic bridge method invoke(p0: java.lang.Object): java.lang.Object public final @org.jetbrains.annotations.Nullable method invokeSuspend(@org.jetbrains.annotations.NotNull p0: java.lang.Object): java.lang.Object } diff --git a/compiler/testData/codegen/bytecodeListing/coroutines/coroutineFields_ir.txt b/compiler/testData/codegen/bytecodeListing/coroutines/coroutineFields_ir.txt index 8823ca00dd0..ccdab5c96ac 100644 --- a/compiler/testData/codegen/bytecodeListing/coroutines/coroutineFields_ir.txt +++ b/compiler/testData/codegen/bytecodeListing/coroutines/coroutineFields_ir.txt @@ -51,7 +51,8 @@ final class CoroutineFieldsKt$box$1 { inner (anonymous) class CoroutineFieldsKt$box$1 method (p0: kotlin.jvm.internal.Ref$ObjectRef, p1: kotlin.coroutines.Continuation): void public final @org.jetbrains.annotations.NotNull method create(@org.jetbrains.annotations.Nullable p0: java.lang.Object, @org.jetbrains.annotations.NotNull p1: kotlin.coroutines.Continuation): kotlin.coroutines.Continuation - public final method invoke(p0: java.lang.Object, p1: java.lang.Object): java.lang.Object + public final @org.jetbrains.annotations.Nullable method invoke(@org.jetbrains.annotations.NotNull p0: Controller, @org.jetbrains.annotations.Nullable p1: kotlin.coroutines.Continuation): java.lang.Object + public synthetic bridge method invoke(p0: java.lang.Object, p1: java.lang.Object): java.lang.Object public final @org.jetbrains.annotations.Nullable method invokeSuspend(@org.jetbrains.annotations.NotNull p0: java.lang.Object): java.lang.Object } diff --git a/compiler/testData/codegen/bytecodeListing/coroutines/spilling/booleanParameter_ir.txt b/compiler/testData/codegen/bytecodeListing/coroutines/spilling/booleanParameter_ir.txt index ddeea63203d..f2782e96fed 100644 --- a/compiler/testData/codegen/bytecodeListing/coroutines/spilling/booleanParameter_ir.txt +++ b/compiler/testData/codegen/bytecodeListing/coroutines/spilling/booleanParameter_ir.txt @@ -10,7 +10,8 @@ final class BooleanParameterKt$box$1 { inner (anonymous) class BooleanParameterKt$box$1 method (p0: kotlin.jvm.internal.Ref$ObjectRef, p1: kotlin.jvm.functions.Function2, p2: kotlin.coroutines.Continuation): void public final @org.jetbrains.annotations.NotNull method create(@org.jetbrains.annotations.NotNull p0: kotlin.coroutines.Continuation): kotlin.coroutines.Continuation - public final method invoke(p0: java.lang.Object): java.lang.Object + public final @org.jetbrains.annotations.Nullable method invoke(@org.jetbrains.annotations.Nullable p0: kotlin.coroutines.Continuation): java.lang.Object + public synthetic bridge method invoke(p0: java.lang.Object): java.lang.Object public final @org.jetbrains.annotations.Nullable method invokeSuspend(@org.jetbrains.annotations.NotNull p0: java.lang.Object): java.lang.Object } @@ -24,7 +25,8 @@ final class BooleanParameterKt$box$lambda$1 { inner (anonymous) class BooleanParameterKt$box$lambda$1 method (p0: kotlin.coroutines.Continuation): void public final @org.jetbrains.annotations.NotNull method create(@org.jetbrains.annotations.Nullable p0: java.lang.Object, @org.jetbrains.annotations.NotNull p1: kotlin.coroutines.Continuation): kotlin.coroutines.Continuation - public final method invoke(p0: java.lang.Object, p1: java.lang.Object): java.lang.Object + public final @org.jetbrains.annotations.Nullable method invoke(p0: boolean, @org.jetbrains.annotations.Nullable p1: kotlin.coroutines.Continuation): java.lang.Object + public synthetic bridge method invoke(p0: java.lang.Object, p1: java.lang.Object): java.lang.Object public final @org.jetbrains.annotations.Nullable method invokeSuspend(@org.jetbrains.annotations.NotNull p0: java.lang.Object): java.lang.Object } diff --git a/compiler/testData/codegen/bytecodeListing/coroutines/spilling/component1_ir.txt b/compiler/testData/codegen/bytecodeListing/coroutines/spilling/component1_ir.txt index 937d21bbe3b..c9795b136d8 100644 --- a/compiler/testData/codegen/bytecodeListing/coroutines/spilling/component1_ir.txt +++ b/compiler/testData/codegen/bytecodeListing/coroutines/spilling/component1_ir.txt @@ -8,7 +8,8 @@ final class Component1Kt$test$1 { inner (anonymous) class Component1Kt$test$1 method (p0: kotlin.coroutines.Continuation): void public final @org.jetbrains.annotations.NotNull method create(@org.jetbrains.annotations.Nullable p0: java.lang.Object, @org.jetbrains.annotations.NotNull p1: kotlin.coroutines.Continuation): kotlin.coroutines.Continuation - public final method invoke(p0: java.lang.Object, p1: java.lang.Object): java.lang.Object + public final @org.jetbrains.annotations.Nullable method invoke(@org.jetbrains.annotations.NotNull p0: Foo, @org.jetbrains.annotations.Nullable p1: kotlin.coroutines.Continuation): java.lang.Object + public synthetic bridge method invoke(p0: java.lang.Object, p1: java.lang.Object): java.lang.Object public final @org.jetbrains.annotations.Nullable method invokeSuspend(@org.jetbrains.annotations.NotNull p0: java.lang.Object): java.lang.Object } diff --git a/compiler/testData/codegen/bytecodeListing/coroutines/spilling/field_ir.txt b/compiler/testData/codegen/bytecodeListing/coroutines/spilling/field_ir.txt index 0d3665da494..b3850efd1d4 100644 --- a/compiler/testData/codegen/bytecodeListing/coroutines/spilling/field_ir.txt +++ b/compiler/testData/codegen/bytecodeListing/coroutines/spilling/field_ir.txt @@ -8,7 +8,8 @@ final class FieldKt$test$1 { inner (anonymous) class FieldKt$test$1 method (p0: kotlin.coroutines.Continuation): void public final @org.jetbrains.annotations.NotNull method create(@org.jetbrains.annotations.Nullable p0: java.lang.Object, @org.jetbrains.annotations.NotNull p1: kotlin.coroutines.Continuation): kotlin.coroutines.Continuation - public final method invoke(p0: java.lang.Object, p1: java.lang.Object): java.lang.Object + public final @org.jetbrains.annotations.Nullable method invoke(@org.jetbrains.annotations.NotNull p0: Foo, @org.jetbrains.annotations.Nullable p1: kotlin.coroutines.Continuation): java.lang.Object + public synthetic bridge method invoke(p0: java.lang.Object, p1: java.lang.Object): java.lang.Object public final @org.jetbrains.annotations.Nullable method invokeSuspend(@org.jetbrains.annotations.NotNull p0: java.lang.Object): java.lang.Object } diff --git a/compiler/testData/codegen/bytecodeText/coroutines/debug/thisAndResultInLvt.kt b/compiler/testData/codegen/bytecodeText/coroutines/debug/thisAndResultInLvt.kt index 814a3bdd596..bd448d25da7 100644 --- a/compiler/testData/codegen/bytecodeText/coroutines/debug/thisAndResultInLvt.kt +++ b/compiler/testData/codegen/bytecodeText/coroutines/debug/thisAndResultInLvt.kt @@ -35,5 +35,5 @@ class A { // 1 LOCALVARIABLE this LThisAndResultInLvtKt\$c\$1; // JVM_IR_TEMPLATES -// , invoke, invokeSuspend -// 3 LOCALVARIABLE this LThisAndResultInLvtKt\$c\$1; L0 L.* 0 +// , invoke, invoke bridge, invokeSuspend +// 4 LOCALVARIABLE this LThisAndResultInLvtKt\$c\$1; L0 L.* 0