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 { 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
@@ -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
@@ -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,