Disallow serialization of private and other non-exported functions.

This commit is contained in:
Alexander Gorshenev
2017-04-27 17:31:08 +03:00
committed by alexander-gorshenev
parent ee6d70fb0f
commit 53d01129ce
3 changed files with 9 additions and 5 deletions
@@ -22,6 +22,7 @@ import org.jetbrains.kotlin.backend.konan.isRepresentedAs
import org.jetbrains.kotlin.backend.konan.isValueType import org.jetbrains.kotlin.backend.konan.isValueType
import org.jetbrains.kotlin.backend.konan.llvm.functionName import org.jetbrains.kotlin.backend.konan.llvm.functionName
import org.jetbrains.kotlin.backend.konan.llvm.localHash import org.jetbrains.kotlin.backend.konan.llvm.localHash
import org.jetbrains.kotlin.backend.konan.llvm.isExported
import org.jetbrains.kotlin.builtins.functions.FunctionClassDescriptor import org.jetbrains.kotlin.builtins.functions.FunctionClassDescriptor
import org.jetbrains.kotlin.builtins.getFunctionalClassKind import org.jetbrains.kotlin.builtins.getFunctionalClassKind
import org.jetbrains.kotlin.builtins.isFunctionType import org.jetbrains.kotlin.builtins.isFunctionType
@@ -304,3 +305,6 @@ internal fun DeclarationDescriptor.getMemberScope(): MemberScope {
internal val FunctionDescriptor.needsInlining: Boolean internal val FunctionDescriptor.needsInlining: Boolean
get() = (this.isInline && !this.isExternal) get() = (this.isInline && !this.isExternal)
internal val FunctionDescriptor.needsSerializedIr: Boolean
get() = (this.needsInlining && this.isExported())
@@ -16,7 +16,7 @@
package org.jetbrains.kotlin.serialization package org.jetbrains.kotlin.serialization
import org.jetbrains.kotlin.backend.konan.descriptors.needsInlining import org.jetbrains.kotlin.backend.konan.descriptors.needsSerializedIr
import org.jetbrains.kotlin.backend.konan.serialization.IrAwareExtension import org.jetbrains.kotlin.backend.konan.serialization.IrAwareExtension
import org.jetbrains.kotlin.backend.konan.util.onlyIf import org.jetbrains.kotlin.backend.konan.util.onlyIf
import org.jetbrains.kotlin.builtins.KotlinBuiltIns import org.jetbrains.kotlin.builtins.KotlinBuiltIns
@@ -228,11 +228,11 @@ class KonanDescriptorSerializer private constructor(
extension.serializeProperty(descriptor, builder) extension.serializeProperty(descriptor, builder)
if (extension is IrAwareExtension) { if (extension is IrAwareExtension) {
descriptor.getter?.onlyIf({needsInlining}) { descriptor.getter?.onlyIf({needsSerializedIr}) {
extension.addGetterIR(builder, extension.addGetterIR(builder,
extension.serializeInlineBody(it, {it -> typeId(it)})) extension.serializeInlineBody(it, {it -> typeId(it)}))
} }
descriptor.setter?.onlyIf({needsInlining}) { descriptor.setter?.onlyIf({needsSerializedIr}) {
extension.addSetterIR(builder, extension.addSetterIR(builder,
extension.serializeInlineBody(it, {it -> typeId(it)})) extension.serializeInlineBody(it, {it -> typeId(it)}))
} }
@@ -296,7 +296,7 @@ class KonanDescriptorSerializer private constructor(
extension.serializeFunction(descriptor, builder) extension.serializeFunction(descriptor, builder)
if (extension is IrAwareExtension if (extension is IrAwareExtension
&& descriptor.needsInlining) { && descriptor.needsSerializedIr) {
extension.addFunctionIR(builder, extension.addFunctionIR(builder,
extension.serializeInlineBody(descriptor, {it -> typeId(it)})) extension.serializeInlineBody(descriptor, {it -> typeId(it)}))
} }
@@ -40,7 +40,7 @@ import org.jetbrains.kotlin.backend.common.validateIrFunction
internal class DeserializerDriver(val context: Context) { internal class DeserializerDriver(val context: Context) {
internal fun deserializeInlineBody(descriptor: FunctionDescriptor): IrDeclaration? { internal fun deserializeInlineBody(descriptor: FunctionDescriptor): IrDeclaration? {
if (!descriptor.needsInlining) return null if (!descriptor.needsSerializedIr) return null
if (!descriptor.isDeserializableCallable) return null if (!descriptor.isDeserializableCallable) return null
var deserializedIr: IrDeclaration? = null var deserializedIr: IrDeclaration? = null