JVM_IR: write correct lambda invoke() signature in metadata

This commit is contained in:
pyos
2021-07-02 10:59:32 +02:00
committed by Alexander Udalov
parent a7c13db575
commit 791fa411d8
3 changed files with 15 additions and 4 deletions
@@ -183,8 +183,13 @@ class FirMetadataSerializer(
serializer!!.packagePartProto(irClass.getPackageFragment()!!.fqName, metadata.fir).apply {
serializerExtension.serializeJvmPackage(this)
}.build()
is FirMetadataSource.Function ->
serializer!!.functionProto(metadata.fir.copyToFreeAnonymousFunction())?.build()
is FirMetadataSource.Function -> {
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
} ?: return null
return message to serializer!!.stringTable as JvmStringTable
@@ -65,8 +65,13 @@ class DescriptorMetadataSerializer(
serializer!!.packagePartProto(irClass.getPackageFragment()!!.fqName, metadata.descriptors).apply {
serializerExtension.serializeJvmPackage(this, type)
}.build()
is DescriptorMetadataSource.Function ->
serializer!!.functionProto(createFreeFakeLambdaDescriptor(metadata.descriptor, context.state.typeApproximator))?.build()
is DescriptorMetadataSource.Function -> {
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
} ?: return null
return message to serializer!!.stringTable as JvmStringTable
@@ -677,6 +677,7 @@ internal class FunctionReferenceLowering(private val context: JvmBackendContext)
returnType = referenceReturnType
isSuspend = callee.isSuspend
}.apply {
metadata = functionReferenceClass.metadata
overriddenSymbols += superMethod.symbol
dispatchReceiverParameter = buildReceiverParameter(
this,