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.llvm.functionName
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.getFunctionalClassKind
import org.jetbrains.kotlin.builtins.isFunctionType
@@ -304,3 +305,6 @@ internal fun DeclarationDescriptor.getMemberScope(): MemberScope {
internal val FunctionDescriptor.needsInlining: Boolean
get() = (this.isInline && !this.isExternal)
internal val FunctionDescriptor.needsSerializedIr: Boolean
get() = (this.needsInlining && this.isExported())
@@ -16,7 +16,7 @@
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.util.onlyIf
import org.jetbrains.kotlin.builtins.KotlinBuiltIns
@@ -228,11 +228,11 @@ class KonanDescriptorSerializer private constructor(
extension.serializeProperty(descriptor, builder)
if (extension is IrAwareExtension) {
descriptor.getter?.onlyIf({needsInlining}) {
descriptor.getter?.onlyIf({needsSerializedIr}) {
extension.addGetterIR(builder,
extension.serializeInlineBody(it, {it -> typeId(it)}))
}
descriptor.setter?.onlyIf({needsInlining}) {
descriptor.setter?.onlyIf({needsSerializedIr}) {
extension.addSetterIR(builder,
extension.serializeInlineBody(it, {it -> typeId(it)}))
}
@@ -296,7 +296,7 @@ class KonanDescriptorSerializer private constructor(
extension.serializeFunction(descriptor, builder)
if (extension is IrAwareExtension
&& descriptor.needsInlining) {
&& descriptor.needsSerializedIr) {
extension.addFunctionIR(builder,
extension.serializeInlineBody(descriptor, {it -> typeId(it)}))
}
@@ -40,7 +40,7 @@ import org.jetbrains.kotlin.backend.common.validateIrFunction
internal class DeserializerDriver(val context: Context) {
internal fun deserializeInlineBody(descriptor: FunctionDescriptor): IrDeclaration? {
if (!descriptor.needsInlining) return null
if (!descriptor.needsSerializedIr) return null
if (!descriptor.isDeserializableCallable) return null
var deserializedIr: IrDeclaration? = null