invoke() with extension receiver is not present in the member scope,

so it needs to be resynthsized.
This commit is contained in:
Alexander Gorshenev
2017-04-05 19:16:20 +03:00
committed by alexander-gorshenev
parent 6d1a9b2420
commit a7b6d1e8ea
@@ -18,11 +18,15 @@ package org.jetbrains.kotlin.backend.konan.serialization
import org.jetbrains.kotlin.backend.konan.Context
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.symbolName
import org.jetbrains.kotlin.descriptors.*
import org.jetbrains.kotlin.incremental.components.NoLookupLocation
import org.jetbrains.kotlin.ir.expressions.IrLoop
import org.jetbrains.kotlin.name.Name
import org.jetbrains.kotlin.resolve.calls.tasks.*
import org.jetbrains.kotlin.resolve.scopes.MemberScope
import org.jetbrains.kotlin.serialization.KonanIr
import org.jetbrains.kotlin.serialization.KonanIr.KotlinDescriptor
@@ -355,10 +359,24 @@ internal class IrDescriptorDeserializer(val context: Context,
DeserializedSimpleFunctionDescriptor {
val originalIndex = descriptorProto.originalIndex
return functions.single() {
val match = functions.singleOrNull() {
val proto = (it as DeserializedSimpleFunctionDescriptor).proto
println("${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(