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
|
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.common.DeepCopyIrTreeWithDescriptors
|
||||||
import org.jetbrains.kotlin.backend.konan.Context
|
import org.jetbrains.kotlin.backend.konan.Context
|
||||||
import org.jetbrains.kotlin.backend.konan.descriptors.isFunctionInvoke
|
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.DeserializerDriver
|
||||||
import org.jetbrains.kotlin.backend.konan.ir.IrInlineFunctionBody
|
import org.jetbrains.kotlin.backend.konan.ir.IrInlineFunctionBody
|
||||||
import org.jetbrains.kotlin.descriptors.FunctionDescriptor
|
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 irCall = super.visitCall(expression) as IrCall
|
||||||
|
|
||||||
val functionDescriptor = irCall.descriptor as FunctionDescriptor
|
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
|
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.Context
|
||||||
import org.jetbrains.kotlin.backend.konan.descriptors.getKonanInternalClass
|
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.PropertyDescriptor
|
||||||
import org.jetbrains.kotlin.descriptors.SourceElement
|
import org.jetbrains.kotlin.descriptors.SourceElement
|
||||||
import org.jetbrains.kotlin.descriptors.annotations.AnnotationDescriptorImpl
|
import org.jetbrains.kotlin.descriptors.annotations.AnnotationDescriptorImpl
|
||||||
@@ -107,8 +108,7 @@ internal class KonanSerializerExtension(val context: Context, val util: KonanSer
|
|||||||
val parentIndex = descriptor.parentFqNameIndex()
|
val parentIndex = descriptor.parentFqNameIndex()
|
||||||
proto.setExtension(KonanLinkData.functionParent, parentIndex)
|
proto.setExtension(KonanLinkData.functionParent, parentIndex)
|
||||||
|
|
||||||
if (descriptor.isInline()) {
|
if (descriptor.needsInlining) {
|
||||||
|
|
||||||
val encodedIR: String = IrSerializer( context,
|
val encodedIR: String = IrSerializer( context,
|
||||||
inlineDescriptorTable, stringTable, util, descriptor)
|
inlineDescriptorTable, stringTable, util, descriptor)
|
||||||
.serializeInlineBody()
|
.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.ir.visitors.acceptVoid
|
||||||
import org.jetbrains.kotlin.backend.konan.descriptors.EmptyDescriptorVisitorVoid
|
import org.jetbrains.kotlin.backend.konan.descriptors.EmptyDescriptorVisitorVoid
|
||||||
import org.jetbrains.kotlin.backend.konan.descriptors.DeepVisitor
|
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.serialization.*
|
||||||
import org.jetbrains.kotlin.backend.konan.llvm.base64Encode
|
import org.jetbrains.kotlin.backend.konan.llvm.base64Encode
|
||||||
import org.jetbrains.kotlin.backend.konan.llvm.base64Decode
|
import org.jetbrains.kotlin.backend.konan.llvm.base64Decode
|
||||||
@@ -43,7 +44,7 @@ internal class DeserializerDriver(val context: Context) {
|
|||||||
val descriptorIndex = IrDeserializationDescriptorIndex(context.irBuiltIns)
|
val descriptorIndex = IrDeserializationDescriptorIndex(context.irBuiltIns)
|
||||||
|
|
||||||
internal fun deserializeInlineBody(descriptor: FunctionDescriptor): IrDeclaration? {
|
internal fun deserializeInlineBody(descriptor: FunctionDescriptor): IrDeclaration? {
|
||||||
if (!descriptor.isInline()) return null
|
if (!descriptor.needsInlining) return null
|
||||||
|
|
||||||
if (descriptor !is DeserializedSimpleFunctionDescriptor) {
|
if (descriptor !is DeserializedSimpleFunctionDescriptor) {
|
||||||
return null
|
return null
|
||||||
|
|||||||
Reference in New Issue
Block a user