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 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.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
} }
@@ -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()
@@ -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