Disallow serialization of private and other non-exported functions.
This commit is contained in:
committed by
alexander-gorshenev
parent
ee6d70fb0f
commit
53d01129ce
+4
@@ -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())
|
||||
|
||||
|
||||
+4
-4
@@ -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)}))
|
||||
}
|
||||
|
||||
+1
-1
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user