JVM_IR: write correct lambda invoke() signature in metadata
This commit is contained in:
+7
-2
@@ -183,8 +183,13 @@ class FirMetadataSerializer(
|
|||||||
serializer!!.packagePartProto(irClass.getPackageFragment()!!.fqName, metadata.fir).apply {
|
serializer!!.packagePartProto(irClass.getPackageFragment()!!.fqName, metadata.fir).apply {
|
||||||
serializerExtension.serializeJvmPackage(this)
|
serializerExtension.serializeJvmPackage(this)
|
||||||
}.build()
|
}.build()
|
||||||
is FirMetadataSource.Function ->
|
is FirMetadataSource.Function -> {
|
||||||
serializer!!.functionProto(metadata.fir.copyToFreeAnonymousFunction())?.build()
|
val withTypeParameters = metadata.fir.copyToFreeAnonymousFunction()
|
||||||
|
serializationBindings.get(FirJvmSerializerExtension.METHOD_FOR_FIR_FUNCTION, metadata.fir)?.let {
|
||||||
|
serializationBindings.put(FirJvmSerializerExtension.METHOD_FOR_FIR_FUNCTION, withTypeParameters, it)
|
||||||
|
}
|
||||||
|
serializer!!.functionProto(withTypeParameters)?.build()
|
||||||
|
}
|
||||||
else -> null
|
else -> null
|
||||||
} ?: return null
|
} ?: return null
|
||||||
return message to serializer!!.stringTable as JvmStringTable
|
return message to serializer!!.stringTable as JvmStringTable
|
||||||
|
|||||||
+7
-2
@@ -65,8 +65,13 @@ class DescriptorMetadataSerializer(
|
|||||||
serializer!!.packagePartProto(irClass.getPackageFragment()!!.fqName, metadata.descriptors).apply {
|
serializer!!.packagePartProto(irClass.getPackageFragment()!!.fqName, metadata.descriptors).apply {
|
||||||
serializerExtension.serializeJvmPackage(this, type)
|
serializerExtension.serializeJvmPackage(this, type)
|
||||||
}.build()
|
}.build()
|
||||||
is DescriptorMetadataSource.Function ->
|
is DescriptorMetadataSource.Function -> {
|
||||||
serializer!!.functionProto(createFreeFakeLambdaDescriptor(metadata.descriptor, context.state.typeApproximator))?.build()
|
val withTypeParameters = createFreeFakeLambdaDescriptor(metadata.descriptor, context.state.typeApproximator)
|
||||||
|
serializationBindings.get(JvmSerializationBindings.METHOD_FOR_FUNCTION, metadata.descriptor)?.let {
|
||||||
|
serializationBindings.put(JvmSerializationBindings.METHOD_FOR_FUNCTION, withTypeParameters, it)
|
||||||
|
}
|
||||||
|
serializer!!.functionProto(withTypeParameters)?.build()
|
||||||
|
}
|
||||||
else -> null
|
else -> null
|
||||||
} ?: return null
|
} ?: return null
|
||||||
return message to serializer!!.stringTable as JvmStringTable
|
return message to serializer!!.stringTable as JvmStringTable
|
||||||
|
|||||||
+1
@@ -677,6 +677,7 @@ internal class FunctionReferenceLowering(private val context: JvmBackendContext)
|
|||||||
returnType = referenceReturnType
|
returnType = referenceReturnType
|
||||||
isSuspend = callee.isSuspend
|
isSuspend = callee.isSuspend
|
||||||
}.apply {
|
}.apply {
|
||||||
|
metadata = functionReferenceClass.metadata
|
||||||
overriddenSymbols += superMethod.symbol
|
overriddenSymbols += superMethod.symbol
|
||||||
dispatchReceiverParameter = buildReceiverParameter(
|
dispatchReceiverParameter = buildReceiverParameter(
|
||||||
this,
|
this,
|
||||||
|
|||||||
Reference in New Issue
Block a user