invoke() with extension receiver is not present in the member scope,
so it needs to be resynthsized.
This commit is contained in:
committed by
alexander-gorshenev
parent
6d1a9b2420
commit
a7b6d1e8ea
+20
-2
@@ -18,11 +18,15 @@ package org.jetbrains.kotlin.backend.konan.serialization
|
|||||||
|
|
||||||
import org.jetbrains.kotlin.backend.konan.Context
|
import org.jetbrains.kotlin.backend.konan.Context
|
||||||
import org.jetbrains.kotlin.backend.konan.descriptors.contributedMethods
|
import org.jetbrains.kotlin.backend.konan.descriptors.contributedMethods
|
||||||
|
import org.jetbrains.kotlin.backend.konan.descriptors.isFunctionInvoke
|
||||||
|
import org.jetbrains.kotlin.backend.konan.KonanIrDeserializationException
|
||||||
import org.jetbrains.kotlin.backend.konan.llvm.base64Decode
|
import org.jetbrains.kotlin.backend.konan.llvm.base64Decode
|
||||||
|
import org.jetbrains.kotlin.backend.konan.llvm.symbolName
|
||||||
import org.jetbrains.kotlin.descriptors.*
|
import org.jetbrains.kotlin.descriptors.*
|
||||||
import org.jetbrains.kotlin.incremental.components.NoLookupLocation
|
import org.jetbrains.kotlin.incremental.components.NoLookupLocation
|
||||||
import org.jetbrains.kotlin.ir.expressions.IrLoop
|
import org.jetbrains.kotlin.ir.expressions.IrLoop
|
||||||
import org.jetbrains.kotlin.name.Name
|
import org.jetbrains.kotlin.name.Name
|
||||||
|
import org.jetbrains.kotlin.resolve.calls.tasks.*
|
||||||
import org.jetbrains.kotlin.resolve.scopes.MemberScope
|
import org.jetbrains.kotlin.resolve.scopes.MemberScope
|
||||||
import org.jetbrains.kotlin.serialization.KonanIr
|
import org.jetbrains.kotlin.serialization.KonanIr
|
||||||
import org.jetbrains.kotlin.serialization.KonanIr.KotlinDescriptor
|
import org.jetbrains.kotlin.serialization.KonanIr.KotlinDescriptor
|
||||||
@@ -355,10 +359,24 @@ internal class IrDescriptorDeserializer(val context: Context,
|
|||||||
DeserializedSimpleFunctionDescriptor {
|
DeserializedSimpleFunctionDescriptor {
|
||||||
|
|
||||||
val originalIndex = descriptorProto.originalIndex
|
val originalIndex = descriptorProto.originalIndex
|
||||||
return functions.single() {
|
val match = functions.singleOrNull() {
|
||||||
val proto = (it as DeserializedSimpleFunctionDescriptor).proto
|
val proto = (it as DeserializedSimpleFunctionDescriptor).proto
|
||||||
|
println("${proto.getExtension(KonanLinkData.functionIndex)} =? ${originalIndex}")
|
||||||
proto.getExtension(KonanLinkData.functionIndex) == originalIndex
|
proto.getExtension(KonanLinkData.functionIndex) == originalIndex
|
||||||
} as DeserializedSimpleFunctionDescriptor
|
} as? DeserializedSimpleFunctionDescriptor
|
||||||
|
if (match != null) return match
|
||||||
|
|
||||||
|
// Special case: for invoke we need to re-synthesize
|
||||||
|
// the invoke() descriptor.
|
||||||
|
val invoke = functions.singleOrNull {
|
||||||
|
(it as FunctionDescriptor).isFunctionInvoke ?: false
|
||||||
|
}
|
||||||
|
|
||||||
|
if (invoke != null)
|
||||||
|
return createSynthesizedInvokes(listOf(invoke as FunctionDescriptor)).single() as DeserializedSimpleFunctionDescriptor
|
||||||
|
else {
|
||||||
|
error("Could not find matching descriptor")
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fun selectConstructor(
|
fun selectConstructor(
|
||||||
|
|||||||
Reference in New Issue
Block a user