JVM_IR: fix unbound type parameters in AddContinuationLowering

This commit is contained in:
Georgy Bronnikov
2020-10-07 20:13:51 +03:00
parent 9929047f5d
commit d246005891
14 changed files with 81 additions and 36 deletions
@@ -27,6 +27,7 @@ import org.jetbrains.kotlin.ir.overrides.IrOverridingUtil
import org.jetbrains.kotlin.ir.symbols.IrSimpleFunctionSymbol import org.jetbrains.kotlin.ir.symbols.IrSimpleFunctionSymbol
import org.jetbrains.kotlin.ir.symbols.IrSymbol import org.jetbrains.kotlin.ir.symbols.IrSymbol
import org.jetbrains.kotlin.ir.symbols.impl.IrPropertySymbolImpl 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.IrSimpleFunctionSymbolImpl
import org.jetbrains.kotlin.ir.symbols.impl.IrValueParameterSymbolImpl import org.jetbrains.kotlin.ir.symbols.impl.IrValueParameterSymbolImpl
import org.jetbrains.kotlin.ir.types.* import org.jetbrains.kotlin.ir.types.*
@@ -163,14 +164,16 @@ fun IrTypeParameter.copyToWithoutSuperTypes(
this.index = index this.index = index
} }
fun IrFunction.copyReceiverParametersFrom(from: IrFunction) { fun IrFunction.copyReceiverParametersFrom(from: IrFunction, substitutionMap: Map<IrTypeParameterSymbol, IrType>) {
dispatchReceiverParameter = from.dispatchReceiverParameter?.run { dispatchReceiverParameter = from.dispatchReceiverParameter?.run {
val newDescriptor = WrappedReceiverParameterDescriptor() val newDescriptor = WrappedReceiverParameterDescriptor()
factory.createValueParameter( factory.createValueParameter(
startOffset, endOffset, origin, startOffset, endOffset, origin,
IrValueParameterSymbolImpl(newDescriptor), IrValueParameterSymbolImpl(newDescriptor),
name, name, index,
index, type, varargElementType, isCrossinline, isNoinline type.substitute(substitutionMap),
varargElementType?.substitute(substitutionMap),
isCrossinline, isNoinline
).also { parameter -> ).also { parameter ->
parameter.parent = this@copyReceiverParametersFrom parameter.parent = this@copyReceiverParametersFrom
newDescriptor.bind(this) newDescriptor.bind(this)
@@ -179,16 +182,19 @@ fun IrFunction.copyReceiverParametersFrom(from: IrFunction) {
extensionReceiverParameter = from.extensionReceiverParameter?.copyTo(this) extensionReceiverParameter = from.extensionReceiverParameter?.copyTo(this)
} }
fun IrFunction.copyValueParametersFrom(from: IrFunction) { fun IrFunction.copyValueParametersFrom(from: IrFunction, substitutionMap: Map<IrTypeParameterSymbol, IrType>) {
copyReceiverParametersFrom(from) copyReceiverParametersFrom(from, substitutionMap)
val shift = valueParameters.size 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) { fun IrFunction.copyParameterDeclarationsFrom(from: IrFunction) {
assert(typeParameters.isEmpty()) assert(typeParameters.isEmpty())
copyTypeParametersFrom(from) copyTypeParametersFrom(from)
copyValueParametersFrom(from) val substitutionMap = makeTypeParameterSubstitutionMap(from, this)
copyValueParametersFrom(from, substitutionMap)
} }
fun IrTypeParametersContainer.copyTypeParameters( fun IrTypeParametersContainer.copyTypeParameters(
@@ -231,6 +237,16 @@ fun IrMutableAnnotationContainer.copyAnnotationsFrom(source: IrAnnotationContain
annotations += source.annotations.map { it.deepCopyWithSymbols(this as? IrDeclarationParent) } annotations += source.annotations.map { it.deepCopyWithSymbols(this as? IrDeclarationParent) }
} }
fun makeTypeParameterSubstitutionMap(
original: IrTypeParametersContainer,
transformed: IrTypeParametersContainer
): Map<IrTypeParameterSymbol, IrType> =
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. // 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 // 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. // different contexts and expect different type of dispatch receivers. The overriding type should be assign compatible to the old type.
@@ -382,7 +382,8 @@ private fun IrFunction.createSuspendFunctionStub(context: JvmBackendContext): Ir
function.copyAttributes(this) function.copyAttributes(this)
function.copyTypeParametersFrom(this) function.copyTypeParametersFrom(this)
function.copyReceiverParametersFrom(this) val substitutionMap = makeTypeParameterSubstitutionMap(this, function)
function.copyReceiverParametersFrom(this, substitutionMap)
if (origin != JvmLoweredDeclarationOrigin.DEFAULT_IMPLS_BRIDGE) { if (origin != JvmLoweredDeclarationOrigin.DEFAULT_IMPLS_BRIDGE) {
function.overriddenSymbols += 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. // 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 val index = valueParameters.firstOrNull { it.origin == IrDeclarationOrigin.MASK_FOR_DEFAULT_FUNCTION }?.index
?: valueParameters.size ?: 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( 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))
}
} }
} }
@@ -74,12 +74,23 @@ private fun IrFunction.capturesCrossinline(): Boolean {
internal abstract class SuspendLoweringUtils(protected val context: JvmBackendContext) { internal abstract class SuspendLoweringUtils(protected val context: JvmBackendContext) {
protected fun IrClass.addFunctionOverride( protected fun IrClass.addFunctionOverride(
function: IrSimpleFunction, startOffset: Int = UNDEFINED_OFFSET, endOffset: Int = UNDEFINED_OFFSET function: IrSimpleFunction,
): IrSimpleFunction = startOffset: Int = UNDEFINED_OFFSET,
addFunction(function.name.asString(), function.returnType, startOffset = startOffset, endOffset = endOffset).apply { 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) 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( protected fun IrClass.addFunctionOverride(
function: IrSimpleFunction, function: IrSimpleFunction,
@@ -178,7 +189,7 @@ private class SuspendLambdaLowering(context: JvmBackendContext) : SuspendLowerin
val createToOverride = suspendLambda.symbol.functions.singleOrNull { val createToOverride = suspendLambda.symbol.functions.singleOrNull {
it.owner.valueParameters.size == arity + 1 && it.owner.name.asString() == "create" 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()) { if (function.capturesCrossinline()) {
addInvokeSuspendForInlineForLambda(invokeSuspend) addInvokeSuspendForInlineForLambda(invokeSuspend)
} }
@@ -192,11 +203,11 @@ private class SuspendLambdaLowering(context: JvmBackendContext) : SuspendLowerin
context.suspendLambdaToOriginalFunctionMap[attributeOwnerId as IrFunctionReference] = function context.suspendLambdaToOriginalFunctionMap[attributeOwnerId as IrFunctionReference] = function
} }
private fun IrClass.addInvokeSuspendForLambda(irFunction: IrFunction, fields: List<IrField>): IrSimpleFunction { private fun IrClass.addInvokeSuspendForLambda(irFunction: IrFunction, suspendLambda: IrClass, fields: List<IrField>): IrSimpleFunction {
val superMethod = context.ir.symbols.suspendLambdaClass.functions.single { val superMethod = suspendLambda.functions.single {
it.owner.name.asString() == INVOKE_SUSPEND_METHOD_NAME && it.owner.valueParameters.size == 1 && it.name.asString() == INVOKE_SUSPEND_METHOD_NAME && it.valueParameters.size == 1 &&
it.owner.valueParameters[0].type.isKotlinResult() it.valueParameters[0].type.isKotlinResult()
}.owner }
return addFunctionOverride(superMethod, irFunction.startOffset, irFunction.endOffset).apply { return addFunctionOverride(superMethod, irFunction.startOffset, irFunction.endOffset).apply {
body = irFunction.moveBodyTo(this, mapOf())?.transform(object : IrElementTransformerVoid() { body = irFunction.moveBodyTo(this, mapOf())?.transform(object : IrElementTransformerVoid() {
override fun visitGetValue(expression: IrGetValue): IrExpression { override fun visitGetValue(expression: IrGetValue): IrExpression {
@@ -9,7 +9,8 @@ final class LambdaWithLongReceiverKt$box$1$1 {
inner (anonymous) class LambdaWithLongReceiverKt$box$1$1 inner (anonymous) class LambdaWithLongReceiverKt$box$1$1
method <init>(p0: kotlin.coroutines.Continuation): void method <init>(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 @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 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 inner (anonymous) class LambdaWithLongReceiverKt$box$1$1
method <init>(p0: kotlin.jvm.internal.Ref$ObjectRef, p1: kotlin.coroutines.Continuation): void method <init>(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 @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 public final @org.jetbrains.annotations.Nullable method invokeSuspend(@org.jetbrains.annotations.NotNull p0: java.lang.Object): java.lang.Object
} }
@@ -13,7 +13,8 @@ final class LambdaWithMultipleParametersKt$box$1$1 {
inner (anonymous) class LambdaWithMultipleParametersKt$box$1 inner (anonymous) class LambdaWithMultipleParametersKt$box$1
inner (anonymous) class LambdaWithMultipleParametersKt$box$1$1 inner (anonymous) class LambdaWithMultipleParametersKt$box$1$1
method <init>(p0: kotlin.coroutines.Continuation): void method <init>(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 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 inner (anonymous) class LambdaWithMultipleParametersKt$box$1$1
method <init>(p0: kotlin.jvm.internal.Ref$ObjectRef, p1: kotlin.coroutines.Continuation): void method <init>(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 @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 public final @org.jetbrains.annotations.Nullable method invokeSuspend(@org.jetbrains.annotations.NotNull p0: java.lang.Object): java.lang.Object
} }
@@ -71,7 +71,8 @@ final class CrossinlineKt$box$1 {
inner (anonymous) class CrossinlineKt$box$1 inner (anonymous) class CrossinlineKt$box$1
method <init>(p0: kotlin.jvm.internal.Ref$IntRef, p1: kotlin.coroutines.Continuation): void method <init>(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 @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 public final @org.jetbrains.annotations.Nullable method invokeSuspend(@org.jetbrains.annotations.NotNull p0: java.lang.Object): java.lang.Object
} }
@@ -10,7 +10,8 @@ final class InlineWithoutStateMachineKt$box$1 {
inner (anonymous) class InlineWithoutStateMachineKt$box$1 inner (anonymous) class InlineWithoutStateMachineKt$box$1
method <init>(p0: kotlin.jvm.internal.Ref$ObjectRef, p1: kotlin.coroutines.Continuation): void method <init>(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 @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 public final @org.jetbrains.annotations.Nullable method invokeSuspend(@org.jetbrains.annotations.NotNull p0: java.lang.Object): java.lang.Object
} }
@@ -19,7 +19,8 @@ final class flow/InnerObjectRetransformationKt$box$1 {
inner (anonymous) class flow/InnerObjectRetransformationKt$box$1 inner (anonymous) class flow/InnerObjectRetransformationKt$box$1
method <init>(p0: kotlin.coroutines.Continuation): void method <init>(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 @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 public final @org.jetbrains.annotations.Nullable method invokeSuspend(@org.jetbrains.annotations.NotNull p0: java.lang.Object): java.lang.Object
} }
@@ -23,7 +23,8 @@ final class Override5Kt$box$1 {
inner (anonymous) class Override5Kt$box$1 inner (anonymous) class Override5Kt$box$1
method <init>(p0: kotlin.coroutines.Continuation): void method <init>(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 @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 public final @org.jetbrains.annotations.Nullable method invokeSuspend(@org.jetbrains.annotations.NotNull p0: java.lang.Object): java.lang.Object
} }
@@ -51,7 +51,8 @@ final class CoroutineFieldsKt$box$1 {
inner (anonymous) class CoroutineFieldsKt$box$1 inner (anonymous) class CoroutineFieldsKt$box$1
method <init>(p0: kotlin.jvm.internal.Ref$ObjectRef, p1: kotlin.coroutines.Continuation): void method <init>(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 @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 public final @org.jetbrains.annotations.Nullable method invokeSuspend(@org.jetbrains.annotations.NotNull p0: java.lang.Object): java.lang.Object
} }
@@ -10,7 +10,8 @@ final class BooleanParameterKt$box$1 {
inner (anonymous) class BooleanParameterKt$box$1 inner (anonymous) class BooleanParameterKt$box$1
method <init>(p0: kotlin.jvm.internal.Ref$ObjectRef, p1: kotlin.jvm.functions.Function2, p2: kotlin.coroutines.Continuation): void method <init>(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 @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 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 inner (anonymous) class BooleanParameterKt$box$lambda$1
method <init>(p0: kotlin.coroutines.Continuation): void method <init>(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 @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 public final @org.jetbrains.annotations.Nullable method invokeSuspend(@org.jetbrains.annotations.NotNull p0: java.lang.Object): java.lang.Object
} }
@@ -8,7 +8,8 @@ final class Component1Kt$test$1 {
inner (anonymous) class Component1Kt$test$1 inner (anonymous) class Component1Kt$test$1
method <init>(p0: kotlin.coroutines.Continuation): void method <init>(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 @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 public final @org.jetbrains.annotations.Nullable method invokeSuspend(@org.jetbrains.annotations.NotNull p0: java.lang.Object): java.lang.Object
} }
@@ -8,7 +8,8 @@ final class FieldKt$test$1 {
inner (anonymous) class FieldKt$test$1 inner (anonymous) class FieldKt$test$1
method <init>(p0: kotlin.coroutines.Continuation): void method <init>(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 @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 public final @org.jetbrains.annotations.Nullable method invokeSuspend(@org.jetbrains.annotations.NotNull p0: java.lang.Object): java.lang.Object
} }
@@ -35,5 +35,5 @@ class A {
// 1 LOCALVARIABLE this LThisAndResultInLvtKt\$c\$1; // 1 LOCALVARIABLE this LThisAndResultInLvtKt\$c\$1;
// JVM_IR_TEMPLATES // JVM_IR_TEMPLATES
// <init>, invoke, invokeSuspend // <init>, invoke, invoke bridge, invokeSuspend
// 3 LOCALVARIABLE this LThisAndResultInLvtKt\$c\$1; L0 L.* 0 // 4 LOCALVARIABLE this LThisAndResultInLvtKt\$c\$1; L0 L.* 0