No serialization for "external public inline" functions.
This commit is contained in:
committed by
alexander-gorshenev
parent
9195291976
commit
429bc31b82
+5
@@ -295,4 +295,9 @@ internal fun DeclarationDescriptor.getMemberScope(): MemberScope {
|
||||
return containingScope
|
||||
}
|
||||
|
||||
// It is possible to declare "external inline fun",
|
||||
// but it doesn't have much sence for native,
|
||||
// since externals don't have IR bodies.
|
||||
internal val FunctionDescriptor.needsInlining: Boolean
|
||||
get() = (this.isInline && !this.isExternal)
|
||||
|
||||
|
||||
+2
-1
@@ -19,6 +19,7 @@ package org.jetbrains.kotlin.backend.konan.lower
|
||||
import org.jetbrains.kotlin.backend.common.DeepCopyIrTreeWithDescriptors
|
||||
import org.jetbrains.kotlin.backend.konan.Context
|
||||
import org.jetbrains.kotlin.backend.konan.descriptors.isFunctionInvoke
|
||||
import org.jetbrains.kotlin.backend.konan.descriptors.needsInlining
|
||||
import org.jetbrains.kotlin.backend.konan.ir.DeserializerDriver
|
||||
import org.jetbrains.kotlin.backend.konan.ir.IrInlineFunctionBody
|
||||
import org.jetbrains.kotlin.descriptors.FunctionDescriptor
|
||||
@@ -89,7 +90,7 @@ internal class FunctionInlining(val context: Context): IrElementTransformerVoid(
|
||||
val irCall = super.visitCall(expression) as IrCall
|
||||
|
||||
val functionDescriptor = irCall.descriptor as FunctionDescriptor
|
||||
if (functionDescriptor.isInline) return inlineFunction(irCall) // Return newly created IrInlineBody instead of IrCall.
|
||||
if (functionDescriptor.needsInlining) return inlineFunction(irCall) // Return newly created IrInlineBody instead of IrCall.
|
||||
|
||||
return irCall
|
||||
}
|
||||
|
||||
+2
-2
@@ -18,6 +18,7 @@ package org.jetbrains.kotlin.backend.konan.serialization
|
||||
|
||||
import org.jetbrains.kotlin.backend.konan.Context
|
||||
import org.jetbrains.kotlin.backend.konan.descriptors.getKonanInternalClass
|
||||
import org.jetbrains.kotlin.backend.konan.descriptors.needsInlining
|
||||
import org.jetbrains.kotlin.descriptors.PropertyDescriptor
|
||||
import org.jetbrains.kotlin.descriptors.SourceElement
|
||||
import org.jetbrains.kotlin.descriptors.annotations.AnnotationDescriptorImpl
|
||||
@@ -107,8 +108,7 @@ internal class KonanSerializerExtension(val context: Context, val util: KonanSer
|
||||
val parentIndex = descriptor.parentFqNameIndex()
|
||||
proto.setExtension(KonanLinkData.functionParent, parentIndex)
|
||||
|
||||
if (descriptor.isInline()) {
|
||||
|
||||
if (descriptor.needsInlining) {
|
||||
val encodedIR: String = IrSerializer( context,
|
||||
inlineDescriptorTable, stringTable, util, descriptor)
|
||||
.serializeInlineBody()
|
||||
|
||||
+2
-1
@@ -29,6 +29,7 @@ import org.jetbrains.kotlin.ir.visitors.acceptChildrenVoid
|
||||
import org.jetbrains.kotlin.ir.visitors.acceptVoid
|
||||
import org.jetbrains.kotlin.backend.konan.descriptors.EmptyDescriptorVisitorVoid
|
||||
import org.jetbrains.kotlin.backend.konan.descriptors.DeepVisitor
|
||||
import org.jetbrains.kotlin.backend.konan.descriptors.needsInlining
|
||||
import org.jetbrains.kotlin.backend.konan.serialization.*
|
||||
import org.jetbrains.kotlin.backend.konan.llvm.base64Encode
|
||||
import org.jetbrains.kotlin.backend.konan.llvm.base64Decode
|
||||
@@ -43,7 +44,7 @@ internal class DeserializerDriver(val context: Context) {
|
||||
val descriptorIndex = IrDeserializationDescriptorIndex(context.irBuiltIns)
|
||||
|
||||
internal fun deserializeInlineBody(descriptor: FunctionDescriptor): IrDeclaration? {
|
||||
if (!descriptor.isInline()) return null
|
||||
if (!descriptor.needsInlining) return null
|
||||
|
||||
if (descriptor !is DeserializedSimpleFunctionDescriptor) {
|
||||
return null
|
||||
|
||||
Reference in New Issue
Block a user