No serialization for "external public inline" functions.

This commit is contained in:
Alexander Gorshenev
2017-04-04 01:29:42 +03:00
committed by alexander-gorshenev
parent 9195291976
commit 429bc31b82
4 changed files with 11 additions and 4 deletions
@@ -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)
@@ -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
}
@@ -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()
@@ -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