[kotlin compiler][update] 1.2.40-dev-1038
This commit is contained in:
committed by
Vasily Levchenko
parent
f4e9eba447
commit
62a7c2d2a4
+3
-5
@@ -17,12 +17,10 @@
|
||||
package org.jetbrains.kotlin.backend.konan.descriptors
|
||||
|
||||
import org.jetbrains.kotlin.descriptors.*
|
||||
import org.jetbrains.kotlin.serialization.deserialization.descriptors.*
|
||||
import org.jetbrains.kotlin.serialization.KonanLinkData
|
||||
import org.jetbrains.kotlin.incremental.components.NoLookupLocation
|
||||
import org.jetbrains.kotlin.name.Name
|
||||
import org.jetbrains.kotlin.name.FqName
|
||||
import org.jetbrains.kotlin.types.KotlinType
|
||||
import org.jetbrains.kotlin.metadata.KonanLinkData
|
||||
import org.jetbrains.kotlin.serialization.deserialization.descriptors.DeserializedCallableMemberDescriptor
|
||||
import org.jetbrains.kotlin.serialization.deserialization.descriptors.DeserializedPropertyDescriptor
|
||||
|
||||
val DeserializedPropertyDescriptor.backingField: PropertyDescriptor?
|
||||
get() =
|
||||
|
||||
+9
-11
@@ -19,25 +19,23 @@ package org.jetbrains.kotlin.backend.konan.serialization
|
||||
import org.jetbrains.kotlin.backend.konan.Context
|
||||
import org.jetbrains.kotlin.backend.konan.KonanIrDeserializationException
|
||||
import org.jetbrains.kotlin.backend.konan.descriptors.contributedMethods
|
||||
import org.jetbrains.kotlin.backend.konan.descriptors.isFunctionInvoke
|
||||
import org.jetbrains.kotlin.backend.konan.descriptors.findPackage
|
||||
import org.jetbrains.kotlin.backend.konan.llvm.isExported
|
||||
import org.jetbrains.kotlin.backend.konan.descriptors.isFunctionInvoke
|
||||
import org.jetbrains.kotlin.descriptors.*
|
||||
import org.jetbrains.kotlin.incremental.components.NoLookupLocation
|
||||
import org.jetbrains.kotlin.ir.expressions.IrLoop
|
||||
import org.jetbrains.kotlin.metadata.KonanIr
|
||||
import org.jetbrains.kotlin.metadata.KonanIr.DeclarationDescriptor.DescriptorCase
|
||||
import org.jetbrains.kotlin.metadata.KonanIr.KotlinDescriptor.Kind.*
|
||||
import org.jetbrains.kotlin.metadata.ProtoBuf
|
||||
import org.jetbrains.kotlin.metadata.deserialization.NameResolver
|
||||
import org.jetbrains.kotlin.metadata.deserialization.NameResolverImpl
|
||||
import org.jetbrains.kotlin.name.Name
|
||||
import org.jetbrains.kotlin.resolve.calls.tasks.createSynthesizedInvokes
|
||||
import org.jetbrains.kotlin.resolve.scopes.MemberScope
|
||||
import org.jetbrains.kotlin.serialization.KonanIr
|
||||
import org.jetbrains.kotlin.serialization.KonanIr.KotlinDescriptor
|
||||
import org.jetbrains.kotlin.serialization.KonanIr.KotlinDescriptor.Kind.*
|
||||
import org.jetbrains.kotlin.serialization.KonanIr.DeclarationDescriptor.*
|
||||
import org.jetbrains.kotlin.serialization.KonanLinkData
|
||||
import org.jetbrains.kotlin.serialization.ProtoBuf
|
||||
import org.jetbrains.kotlin.serialization.deserialization.NameResolver
|
||||
import org.jetbrains.kotlin.serialization.deserialization.NameResolverImpl
|
||||
import org.jetbrains.kotlin.serialization.deserialization.descriptors.*
|
||||
import org.jetbrains.kotlin.types.*
|
||||
import org.jetbrains.kotlin.types.KotlinType
|
||||
import org.jetbrains.kotlin.types.isError
|
||||
|
||||
internal fun DeserializedMemberDescriptor.nameTable(): ProtoBuf.QualifiedNameTable {
|
||||
val pkg = this.findPackage()
|
||||
|
||||
+2
-3
@@ -17,15 +17,14 @@
|
||||
package org.jetbrains.kotlin.backend.konan.serialization
|
||||
|
||||
import org.jetbrains.kotlin.backend.konan.Context
|
||||
import org.jetbrains.kotlin.backend.konan.descriptors.*
|
||||
import org.jetbrains.kotlin.backend.konan.descriptors.propertyIfAccessor
|
||||
import org.jetbrains.kotlin.descriptors.*
|
||||
import org.jetbrains.kotlin.serialization.KonanDescriptorSerializer
|
||||
import org.jetbrains.kotlin.descriptors.impl.LocalVariableDescriptor
|
||||
import org.jetbrains.kotlin.ir.descriptors.IrTemporaryVariableDescriptor
|
||||
import org.jetbrains.kotlin.metadata.KonanIr
|
||||
import org.jetbrains.kotlin.resolve.DescriptorUtils
|
||||
import org.jetbrains.kotlin.resolve.calls.inference.CapturedType
|
||||
import org.jetbrains.kotlin.resolve.calls.inference.isCaptured
|
||||
import org.jetbrains.kotlin.serialization.KonanIr
|
||||
import org.jetbrains.kotlin.types.KotlinType
|
||||
|
||||
val DeclarationDescriptor.classOrPackage: DeclarationDescriptor?
|
||||
|
||||
+7
-13
@@ -17,24 +17,18 @@
|
||||
package org.jetbrains.kotlin.backend.konan.serialization
|
||||
|
||||
import org.jetbrains.kotlin.descriptors.SourceElement
|
||||
import org.jetbrains.kotlin.descriptors.ClassDescriptor
|
||||
import org.jetbrains.kotlin.descriptors.DeclarationDescriptor
|
||||
import org.jetbrains.kotlin.metadata.KonanLinkData
|
||||
import org.jetbrains.kotlin.metadata.deserialization.NameResolver
|
||||
import org.jetbrains.kotlin.name.ClassId
|
||||
import org.jetbrains.kotlin.name.FqName
|
||||
import org.jetbrains.kotlin.resolve.scopes.DescriptorKindFilter
|
||||
import org.jetbrains.kotlin.serialization.ClassData
|
||||
import org.jetbrains.kotlin.serialization.ClassDataWithSource
|
||||
import org.jetbrains.kotlin.serialization.DescriptorSerializer
|
||||
import org.jetbrains.kotlin.serialization.KonanLinkData
|
||||
import org.jetbrains.kotlin.serialization.StringTable
|
||||
import org.jetbrains.kotlin.serialization.deserialization.NameResolver
|
||||
import org.jetbrains.kotlin.serialization.deserialization.ClassData
|
||||
import org.jetbrains.kotlin.serialization.deserialization.ClassDataFinder
|
||||
import org.jetbrains.kotlin.serialization.deserialization.getClassId
|
||||
|
||||
class KonanClassDataFinder(
|
||||
private val fragment: KonanLinkData.PackageFragment,
|
||||
private val fragment: KonanLinkData.LinkDataPackageFragment,
|
||||
private val nameResolver: NameResolver
|
||||
) : ClassDataFinder {
|
||||
override fun findClassData(classId: ClassId): ClassDataWithSource? {
|
||||
override fun findClassData(classId: ClassId): ClassData? {
|
||||
val proto = fragment.classes
|
||||
val nameList = proto.getClassNameList()
|
||||
|
||||
@@ -47,7 +41,7 @@ class KonanClassDataFinder(
|
||||
if (foundClass == null)
|
||||
error("Could not find data for serialized class ${classId}")
|
||||
|
||||
return ClassDataWithSource(ClassData(nameResolver, foundClass), SourceElement.NO_SOURCE)
|
||||
return ClassData(nameResolver, foundClass, SourceElement.NO_SOURCE)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+98
-50
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright 2010-2017 JetBrains s.r.o.
|
||||
* Copyright 2010-2018 JetBrains s.r.o.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
@@ -25,6 +25,12 @@ import org.jetbrains.kotlin.builtins.transformSuspendFunctionToRuntimeFunctionTy
|
||||
import org.jetbrains.kotlin.config.LanguageFeature
|
||||
import org.jetbrains.kotlin.descriptors.*
|
||||
import org.jetbrains.kotlin.descriptors.annotations.Annotated
|
||||
import org.jetbrains.kotlin.metadata.ProtoBuf
|
||||
import org.jetbrains.kotlin.metadata.deserialization.Flags
|
||||
import org.jetbrains.kotlin.metadata.serialization.Interner
|
||||
import org.jetbrains.kotlin.metadata.serialization.MutableTypeTable
|
||||
import org.jetbrains.kotlin.metadata.serialization.MutableVersionRequirementTable
|
||||
import org.jetbrains.kotlin.metadata.serialization.StringTable
|
||||
import org.jetbrains.kotlin.name.FqName
|
||||
import org.jetbrains.kotlin.name.Name
|
||||
import org.jetbrains.kotlin.protobuf.MessageLite
|
||||
@@ -32,15 +38,17 @@ import org.jetbrains.kotlin.resolve.DescriptorUtils
|
||||
import org.jetbrains.kotlin.resolve.DescriptorUtils.isEnumEntry
|
||||
import org.jetbrains.kotlin.resolve.MemberComparator
|
||||
import org.jetbrains.kotlin.resolve.RequireKotlinNames
|
||||
import org.jetbrains.kotlin.resolve.calls.components.isActualParameterWithExpectedDefault
|
||||
import org.jetbrains.kotlin.resolve.checkers.KotlinVersionStringAnnotationValueChecker
|
||||
import org.jetbrains.kotlin.resolve.constants.EnumValue
|
||||
import org.jetbrains.kotlin.resolve.constants.IntValue
|
||||
import org.jetbrains.kotlin.resolve.constants.NullValue
|
||||
import org.jetbrains.kotlin.resolve.constants.StringValue
|
||||
import org.jetbrains.kotlin.serialization.deserialization.ProtoEnumFlags
|
||||
import org.jetbrains.kotlin.serialization.deserialization.descriptors.VersionRequirement
|
||||
import org.jetbrains.kotlin.types.*
|
||||
import org.jetbrains.kotlin.types.typeUtil.contains
|
||||
import org.jetbrains.kotlin.utils.Interner
|
||||
import org.jetbrains.kotlin.metadata.serialization.*
|
||||
import java.io.ByteArrayOutputStream
|
||||
import java.util.*
|
||||
|
||||
@@ -52,18 +60,13 @@ class KonanDescriptorSerializer private constructor(
|
||||
private val versionRequirementTable: MutableVersionRequirementTable,
|
||||
private val serializeTypeTableToFunction: Boolean
|
||||
) {
|
||||
fun serialize(message: MessageLite): ByteArray {
|
||||
return ByteArrayOutputStream().apply {
|
||||
stringTable.serializeTo(this)
|
||||
message.writeTo(this)
|
||||
}.toByteArray()
|
||||
}
|
||||
private val contractSerializer = ContractSerializer()
|
||||
|
||||
fun createChildSerializer(descriptor: DeclarationDescriptor): KonanDescriptorSerializer =
|
||||
KonanDescriptorSerializer(descriptor, Interner(typeParameters), extension, typeTable, versionRequirementTable,
|
||||
serializeTypeTableToFunction = false)
|
||||
|
||||
val stringTable: StringTable
|
||||
val stringTable: DescriptorAwareStringTable
|
||||
get() = extension.stringTable
|
||||
|
||||
private fun useTypeTable(): Boolean = extension.shouldUseTypeTable()
|
||||
@@ -72,9 +75,11 @@ class KonanDescriptorSerializer private constructor(
|
||||
val builder = ProtoBuf.Class.newBuilder()
|
||||
|
||||
val flags = Flags.getClassFlags(
|
||||
hasAnnotations(classDescriptor), classDescriptor.visibility, classDescriptor.modality, classDescriptor.kind,
|
||||
classDescriptor.isInner, classDescriptor.isCompanionObject, classDescriptor.isData, classDescriptor.isExternal,
|
||||
classDescriptor.isExpect, classDescriptor.isInline
|
||||
hasAnnotations(classDescriptor),
|
||||
ProtoEnumFlags.visibility(normalizeVisibility(classDescriptor)),
|
||||
ProtoEnumFlags.modality(classDescriptor.modality),
|
||||
ProtoEnumFlags.classKind(classDescriptor.kind, classDescriptor.isCompanionObject),
|
||||
classDescriptor.isInner, classDescriptor.isData, classDescriptor.isExternal, classDescriptor.isExpect, classDescriptor.isInline
|
||||
)
|
||||
if (flags != builder.flags) {
|
||||
builder.flags = flags
|
||||
@@ -102,18 +107,24 @@ class KonanDescriptorSerializer private constructor(
|
||||
builder.addConstructor(constructorProto(descriptor))
|
||||
}
|
||||
|
||||
for (descriptor in sort(DescriptorUtils.getAllDescriptors(classDescriptor.defaultType.memberScope))) {
|
||||
if (descriptor is CallableMemberDescriptor) {
|
||||
if (descriptor.kind == CallableMemberDescriptor.Kind.FAKE_OVERRIDE) continue
|
||||
val callableMembers =
|
||||
extension.customClassMembersProducer?.getCallableMembers(classDescriptor)
|
||||
?: sort(
|
||||
DescriptorUtils.getAllDescriptors(classDescriptor.defaultType.memberScope)
|
||||
.filterIsInstance<CallableMemberDescriptor>()
|
||||
)
|
||||
|
||||
when (descriptor) {
|
||||
is PropertyDescriptor -> builder.addProperty(propertyProto(descriptor))
|
||||
is FunctionDescriptor -> builder.addFunction(functionProto(descriptor))
|
||||
}
|
||||
for (descriptor in callableMembers) {
|
||||
if (descriptor.kind == CallableMemberDescriptor.Kind.FAKE_OVERRIDE) continue
|
||||
|
||||
when (descriptor) {
|
||||
is PropertyDescriptor -> builder.addProperty(propertyProto(descriptor))
|
||||
is FunctionDescriptor -> builder.addFunction(functionProto(descriptor))
|
||||
}
|
||||
}
|
||||
|
||||
for (descriptor in sort(DescriptorUtils.getAllDescriptors(classDescriptor.unsubstitutedInnerClassesScope))) {
|
||||
val nestedClassifiers = sort(DescriptorUtils.getAllDescriptors(classDescriptor.unsubstitutedInnerClassesScope))
|
||||
for (descriptor in nestedClassifiers) {
|
||||
if (descriptor is TypeAliasDescriptor) {
|
||||
builder.addTypeAlias(typeAliasProto(descriptor))
|
||||
}
|
||||
@@ -153,7 +164,6 @@ class KonanDescriptorSerializer private constructor(
|
||||
}
|
||||
|
||||
extension.serializeClass(classDescriptor, builder)
|
||||
|
||||
return builder
|
||||
}
|
||||
|
||||
@@ -164,15 +174,18 @@ class KonanDescriptorSerializer private constructor(
|
||||
|
||||
var hasGetter = false
|
||||
var hasSetter = false
|
||||
val lateInit = descriptor.isLateInit
|
||||
val isConst = descriptor.isConst
|
||||
|
||||
val compileTimeConstant = descriptor.compileTimeInitializer
|
||||
val hasConstant = compileTimeConstant != null && compileTimeConstant !is NullValue
|
||||
|
||||
val hasAnnotations = descriptor.annotations.getAllAnnotations().isNotEmpty()
|
||||
|
||||
val propertyFlags = Flags.getAccessorFlags(hasAnnotations, descriptor.visibility, descriptor.modality, false, false, false)
|
||||
val propertyFlags = Flags.getAccessorFlags(
|
||||
hasAnnotations,
|
||||
ProtoEnumFlags.visibility(normalizeVisibility(descriptor)),
|
||||
ProtoEnumFlags.modality(descriptor.modality),
|
||||
false, false, false
|
||||
)
|
||||
|
||||
val getter = descriptor.getter
|
||||
if (getter != null) {
|
||||
@@ -200,9 +213,12 @@ class KonanDescriptorSerializer private constructor(
|
||||
}
|
||||
|
||||
val flags = Flags.getPropertyFlags(
|
||||
hasAnnotations, descriptor.visibility, descriptor.modality, descriptor.kind, descriptor.isVar,
|
||||
hasGetter, hasSetter, hasConstant, isConst, lateInit, descriptor.isExternal,
|
||||
@Suppress("DEPRECATION") descriptor.isDelegated, descriptor.isExpect
|
||||
hasAnnotations,
|
||||
ProtoEnumFlags.visibility(normalizeVisibility(descriptor)),
|
||||
ProtoEnumFlags.modality(descriptor.modality),
|
||||
ProtoEnumFlags.memberKind(descriptor.kind),
|
||||
descriptor.isVar, hasGetter, hasSetter, hasConstant, descriptor.isConst, descriptor.isLateInit, descriptor.isExternal,
|
||||
@Suppress("DEPRECATION") descriptor.isDelegated, descriptor.isExpect
|
||||
)
|
||||
if (flags != builder.flags) {
|
||||
builder.flags = flags
|
||||
@@ -238,8 +254,10 @@ class KonanDescriptorSerializer private constructor(
|
||||
else if (descriptor.isSuspendOrHasSuspendTypesInSignature()) {
|
||||
builder.versionRequirement = writeVersionRequirement(LanguageFeature.Coroutines)
|
||||
}
|
||||
|
||||
extension.serializeProperty(descriptor, builder)
|
||||
|
||||
/* Konan specific chunk */
|
||||
if (extension is IrAwareExtension) {
|
||||
descriptor.getter?.onlyIf({needsSerializedIr}) {
|
||||
extension.addGetterIR(builder,
|
||||
@@ -254,15 +272,25 @@ class KonanDescriptorSerializer private constructor(
|
||||
return builder
|
||||
}
|
||||
|
||||
private fun normalizeVisibility(descriptor: DeclarationDescriptorWithVisibility) =
|
||||
// It can be necessary for Java classes serialization having package-private visibility
|
||||
if (extension.shouldUseNormalizedVisibility())
|
||||
descriptor.visibility.normalize()
|
||||
else
|
||||
descriptor.visibility
|
||||
|
||||
fun functionProto(descriptor: FunctionDescriptor): ProtoBuf.Function.Builder {
|
||||
val builder = ProtoBuf.Function.newBuilder()
|
||||
|
||||
val local = createChildSerializer(descriptor)
|
||||
|
||||
val flags = Flags.getFunctionFlags(
|
||||
hasAnnotations(descriptor), descriptor.visibility, descriptor.modality, descriptor.kind, descriptor.isOperator,
|
||||
descriptor.isInfix, descriptor.isInline, descriptor.isTailrec, descriptor.isExternal, descriptor.isSuspend,
|
||||
descriptor.isExpect
|
||||
hasAnnotations(descriptor),
|
||||
ProtoEnumFlags.visibility(normalizeVisibility(descriptor)),
|
||||
ProtoEnumFlags.modality(descriptor.modality),
|
||||
ProtoEnumFlags.memberKind(descriptor.kind),
|
||||
descriptor.isOperator, descriptor.isInfix, descriptor.isInline, descriptor.isTailrec, descriptor.isExternal,
|
||||
descriptor.isSuspend, descriptor.isExpect
|
||||
)
|
||||
if (flags != builder.flags) {
|
||||
builder.flags = flags
|
||||
@@ -310,8 +338,12 @@ class KonanDescriptorSerializer private constructor(
|
||||
builder.versionRequirement = writeVersionRequirement(LanguageFeature.Coroutines)
|
||||
}
|
||||
|
||||
// TODO: K/N & Contracts???
|
||||
// contractSerializer.serializeContractOfFunctionIfAny(descriptor, builder, this)
|
||||
//
|
||||
extension.serializeFunction(descriptor, builder)
|
||||
|
||||
/* Konan specific chunk */
|
||||
if (extension is IrAwareExtension && descriptor.needsSerializedIr) {
|
||||
extension.addFunctionIR(builder,
|
||||
extension.serializeInlineBody(descriptor, local))
|
||||
@@ -325,7 +357,9 @@ class KonanDescriptorSerializer private constructor(
|
||||
|
||||
val local = createChildSerializer(descriptor)
|
||||
|
||||
val flags = Flags.getConstructorFlags(hasAnnotations(descriptor), descriptor.visibility, !descriptor.isPrimary)
|
||||
val flags = Flags.getConstructorFlags(
|
||||
hasAnnotations(descriptor), ProtoEnumFlags.visibility(normalizeVisibility(descriptor)), !descriptor.isPrimary
|
||||
)
|
||||
if (flags != builder.flags) {
|
||||
builder.flags = flags
|
||||
}
|
||||
@@ -344,6 +378,7 @@ class KonanDescriptorSerializer private constructor(
|
||||
|
||||
extension.serializeConstructor(descriptor, builder)
|
||||
|
||||
/* Konan specific chunk */
|
||||
if (extension is IrAwareExtension && descriptor.needsSerializedIr) {
|
||||
extension.addConstructorIR(builder,
|
||||
extension.serializeInlineBody(descriptor, local))
|
||||
@@ -366,7 +401,7 @@ class KonanDescriptorSerializer private constructor(
|
||||
val builder = ProtoBuf.TypeAlias.newBuilder()
|
||||
val local = createChildSerializer(descriptor)
|
||||
|
||||
val flags = Flags.getTypeAliasFlags(hasAnnotations(descriptor), descriptor.visibility)
|
||||
val flags = Flags.getTypeAliasFlags(hasAnnotations(descriptor), ProtoEnumFlags.visibility(normalizeVisibility(descriptor)))
|
||||
if (flags != builder.flags) {
|
||||
builder.flags = flags
|
||||
}
|
||||
@@ -393,6 +428,11 @@ class KonanDescriptorSerializer private constructor(
|
||||
builder.setExpandedType(local.type(expandedType))
|
||||
}
|
||||
|
||||
val requirement = serializeVersionRequirement(descriptor)
|
||||
if (requirement != null) {
|
||||
builder.versionRequirement = requirement
|
||||
}
|
||||
|
||||
builder.addAllAnnotation(descriptor.annotations.map { extension.annotationSerializer.serializeAnnotation(it) })
|
||||
|
||||
return builder
|
||||
@@ -408,9 +448,10 @@ class KonanDescriptorSerializer private constructor(
|
||||
private fun valueParameter(descriptor: ValueParameterDescriptor): ProtoBuf.ValueParameter.Builder {
|
||||
val builder = ProtoBuf.ValueParameter.newBuilder()
|
||||
|
||||
val declaresDefaultValue = descriptor.declaresDefaultValue() || descriptor.isActualParameterWithExpectedDefault
|
||||
|
||||
val flags = Flags.getValueParameterFlags(
|
||||
hasAnnotations(descriptor), descriptor.declaresDefaultValue(),
|
||||
descriptor.isCrossinline, descriptor.isNoinline
|
||||
hasAnnotations(descriptor), declaresDefaultValue, descriptor.isCrossinline, descriptor.isNoinline
|
||||
)
|
||||
if (flags != builder.flags) {
|
||||
builder.flags = flags
|
||||
@@ -472,9 +513,10 @@ class KonanDescriptorSerializer private constructor(
|
||||
return builder
|
||||
}
|
||||
|
||||
/* Konan needs public modifier */
|
||||
public fun typeId(type: KotlinType) = typeTable[type(type)]
|
||||
|
||||
private fun type(type: KotlinType): ProtoBuf.Type.Builder {
|
||||
internal fun type(type: KotlinType): ProtoBuf.Type.Builder {
|
||||
val builder = ProtoBuf.Type.newBuilder()
|
||||
|
||||
if (type.isError) {
|
||||
@@ -650,17 +692,17 @@ class KonanDescriptorSerializer private constructor(
|
||||
|
||||
val level = (args[RequireKotlinNames.LEVEL] as? EnumValue)?.enumEntryName?.asString()
|
||||
when (level) {
|
||||
DeprecationLevel.ERROR.toString() -> { /* ERROR is the default level */ }
|
||||
DeprecationLevel.WARNING.toString() -> proto.level = ProtoBuf.VersionRequirement.Level.WARNING
|
||||
DeprecationLevel.HIDDEN.toString() -> proto.level = ProtoBuf.VersionRequirement.Level.HIDDEN
|
||||
DeprecationLevel.ERROR.name -> { /* ERROR is the default level */ }
|
||||
DeprecationLevel.WARNING.name -> proto.level = ProtoBuf.VersionRequirement.Level.WARNING
|
||||
DeprecationLevel.HIDDEN.name -> proto.level = ProtoBuf.VersionRequirement.Level.HIDDEN
|
||||
}
|
||||
|
||||
val versionKind = (args[RequireKotlinNames.VERSION_KIND] as? EnumValue)?.enumEntryName?.asString()
|
||||
when (versionKind) {
|
||||
ProtoBuf.VersionRequirement.VersionKind.LANGUAGE_VERSION.toString() -> { /* LANGUAGE_VERSION is the default kind */ }
|
||||
ProtoBuf.VersionRequirement.VersionKind.COMPILER_VERSION.toString() ->
|
||||
ProtoBuf.VersionRequirement.VersionKind.LANGUAGE_VERSION.name -> { /* LANGUAGE_VERSION is the default kind */ }
|
||||
ProtoBuf.VersionRequirement.VersionKind.COMPILER_VERSION.name ->
|
||||
proto.versionKind = ProtoBuf.VersionRequirement.VersionKind.COMPILER_VERSION
|
||||
ProtoBuf.VersionRequirement.VersionKind.API_VERSION.toString() ->
|
||||
ProtoBuf.VersionRequirement.VersionKind.API_VERSION.name ->
|
||||
proto.versionKind = ProtoBuf.VersionRequirement.VersionKind.API_VERSION
|
||||
}
|
||||
|
||||
@@ -681,6 +723,15 @@ class KonanDescriptorSerializer private constructor(
|
||||
private fun getTypeParameterId(descriptor: TypeParameterDescriptor): Int =
|
||||
typeParameters.intern(descriptor)
|
||||
|
||||
private fun getAccessorFlags(accessor: PropertyAccessorDescriptor): Int = Flags.getAccessorFlags(
|
||||
hasAnnotations(accessor),
|
||||
ProtoEnumFlags.visibility(normalizeVisibility(accessor)),
|
||||
ProtoEnumFlags.modality(accessor.modality),
|
||||
!accessor.isDefault,
|
||||
accessor.isExternal,
|
||||
accessor.isInline
|
||||
)
|
||||
|
||||
companion object {
|
||||
@JvmStatic
|
||||
fun createTopLevel(extension: SerializerExtension): KonanDescriptorSerializer {
|
||||
@@ -719,15 +770,12 @@ class KonanDescriptorSerializer private constructor(
|
||||
return serializer
|
||||
}
|
||||
|
||||
private fun getAccessorFlags(accessor: PropertyAccessorDescriptor): Int {
|
||||
return Flags.getAccessorFlags(
|
||||
hasAnnotations(accessor),
|
||||
accessor.visibility,
|
||||
accessor.modality,
|
||||
!accessor.isDefault,
|
||||
accessor.isExternal,
|
||||
accessor.isInline
|
||||
)
|
||||
@JvmStatic
|
||||
fun serialize(message: MessageLite, stringTable: StringTable): ByteArray {
|
||||
return ByteArrayOutputStream().apply {
|
||||
stringTable.serializeTo(this)
|
||||
message.writeTo(this)
|
||||
}.toByteArray()
|
||||
}
|
||||
|
||||
private fun variance(variance: Variance): ProtoBuf.TypeParameter.Variance = when (variance) {
|
||||
|
||||
+2
-2
@@ -1,8 +1,8 @@
|
||||
|
||||
syntax = "proto2";
|
||||
package org.jetbrains.kotlin.serialization;
|
||||
package org.jetbrains.kotlin.metadata;
|
||||
|
||||
import "org/jetbrains/kotlin/backend/konan/serialization/descriptors.proto1";
|
||||
import "org/jetbrains/kotlin/backend/konan/serialization/metadata.proto1";
|
||||
option java_outer_classname = "KonanIr";
|
||||
option optimize_for = LITE_RUNTIME;
|
||||
|
||||
|
||||
+6
-6
@@ -1,6 +1,6 @@
|
||||
|
||||
syntax = "proto2";
|
||||
package org.jetbrains.kotlin.serialization;
|
||||
package org.jetbrains.kotlin.metadata;
|
||||
|
||||
// This, and all the rest of the included proto files have ".proto1" extension.
|
||||
// That allows us to construct the current file,
|
||||
@@ -8,7 +8,7 @@ package org.jetbrains.kotlin.serialization;
|
||||
// The issue here is that we need to co-exist with the big Kotlin,
|
||||
// in the same namespace of renamed org.jetbrains.kotlin.protobuf packages.
|
||||
// In case we merge to the main Kotlin workspace the scheme will be simplified.
|
||||
import "org/jetbrains/kotlin/backend/konan/serialization/descriptors.proto1";
|
||||
import "org/jetbrains/kotlin/backend/konan/serialization/metadata.proto1";
|
||||
|
||||
option java_outer_classname = "KonanLinkData";
|
||||
option optimize_for = LITE_RUNTIME;
|
||||
@@ -71,11 +71,11 @@ message InlineIrBody {
|
||||
|
||||
// Konan Binary Linkdata structures.
|
||||
|
||||
message PackageFragment {
|
||||
message LinkDataPackageFragment {
|
||||
// Make if an index?
|
||||
required string fq_name = 1;
|
||||
required Package package = 4;
|
||||
required Classes classes = 5;
|
||||
required LinkDataClasses classes = 5;
|
||||
required bool is_empty = 6;
|
||||
|
||||
// To construct name resolver
|
||||
@@ -83,13 +83,13 @@ message PackageFragment {
|
||||
required StringTable string_table = 3;
|
||||
}
|
||||
|
||||
message Classes {
|
||||
message LinkDataClasses {
|
||||
// Index in the QualifiedNameIndex table.
|
||||
repeated int32 class_name = 1;
|
||||
repeated Class classes = 2;
|
||||
}
|
||||
|
||||
message Library {
|
||||
message LinkDataLibrary {
|
||||
required string module_name = 1;
|
||||
repeated string package_fragment_name = 2;
|
||||
repeated string empty_package = 3;
|
||||
|
||||
+6
-4
@@ -20,10 +20,12 @@ import org.jetbrains.kotlin.backend.konan.library.KonanLibraryReader
|
||||
import org.jetbrains.kotlin.descriptors.ModuleDescriptor
|
||||
import org.jetbrains.kotlin.name.FqName
|
||||
import org.jetbrains.kotlin.name.Name
|
||||
import org.jetbrains.kotlin.serialization.KonanLinkData
|
||||
import org.jetbrains.kotlin.metadata.KonanLinkData
|
||||
import org.jetbrains.kotlin.serialization.deserialization.DeserializedPackageFragment
|
||||
import org.jetbrains.kotlin.serialization.deserialization.NameResolverImpl
|
||||
import org.jetbrains.kotlin.metadata.deserialization.NameResolverImpl
|
||||
import org.jetbrains.kotlin.serialization.deserialization.descriptors.DeserializedPackageMemberScope
|
||||
import org.jetbrains.kotlin.serialization.deserialization.getClassId
|
||||
import org.jetbrains.kotlin.serialization.deserialization.getName
|
||||
import org.jetbrains.kotlin.storage.StorageManager
|
||||
|
||||
class KonanPackageFragment(
|
||||
@@ -34,11 +36,11 @@ class KonanPackageFragment(
|
||||
|
||||
// The proto field is lazy so that we can load only needed
|
||||
// packages from the library.
|
||||
private val protoForNames: KonanLinkData.PackageFragment by lazy {
|
||||
private val protoForNames: KonanLinkData.LinkDataPackageFragment by lazy {
|
||||
parsePackageFragment(reader.packageMetadata(fqNameString))
|
||||
}
|
||||
|
||||
val proto: KonanLinkData.PackageFragment get() = protoForNames.also {
|
||||
val proto: KonanLinkData.LinkDataPackageFragment get() = protoForNames.also {
|
||||
reader.markPackageAccessed(fqNameString)
|
||||
}
|
||||
|
||||
|
||||
+15
-29
@@ -16,46 +16,32 @@
|
||||
|
||||
package org.jetbrains.kotlin.backend.konan.serialization
|
||||
|
||||
import org.jetbrains.kotlin.backend.konan.*
|
||||
import org.jetbrains.kotlin.backend.konan.Context
|
||||
import org.jetbrains.kotlin.backend.konan.createInteropLibrary
|
||||
import org.jetbrains.kotlin.backend.konan.descriptors.DeserializedKonanModule
|
||||
import org.jetbrains.kotlin.backend.konan.descriptors.createKonanModuleDescriptor
|
||||
import org.jetbrains.kotlin.backend.konan.descriptors.isExpectMember
|
||||
import org.jetbrains.kotlin.backend.konan.library.KonanLibraryReader
|
||||
import org.jetbrains.kotlin.backend.konan.library.LinkData
|
||||
import org.jetbrains.kotlin.backend.konan.llvm.base64Decode
|
||||
import org.jetbrains.kotlin.backend.konan.llvm.base64Encode
|
||||
import org.jetbrains.kotlin.backend.konan.llvm.isExported
|
||||
import org.jetbrains.kotlin.config.CompilerConfiguration
|
||||
import org.jetbrains.kotlin.config.LanguageVersion
|
||||
import org.jetbrains.kotlin.config.LanguageVersionSettings
|
||||
import org.jetbrains.kotlin.config.languageVersionSettings
|
||||
import org.jetbrains.kotlin.descriptors.*
|
||||
import org.jetbrains.kotlin.descriptors.impl.LocalVariableDescriptor
|
||||
import org.jetbrains.kotlin.descriptors.impl.ModuleDescriptorImpl
|
||||
import org.jetbrains.kotlin.descriptors.impl.PropertyDescriptorImpl
|
||||
import org.jetbrains.kotlin.incremental.components.LookupTracker
|
||||
import org.jetbrains.kotlin.ir.descriptors.IrTemporaryVariableDescriptor
|
||||
import org.jetbrains.kotlin.metadata.KonanLinkData
|
||||
import org.jetbrains.kotlin.metadata.KonanLinkData.*
|
||||
import org.jetbrains.kotlin.metadata.ProtoBuf
|
||||
import org.jetbrains.kotlin.name.FqName
|
||||
import org.jetbrains.kotlin.name.Name
|
||||
import org.jetbrains.kotlin.resolve.CompilerDeserializationConfiguration
|
||||
import org.jetbrains.kotlin.resolve.DescriptorUtils
|
||||
import org.jetbrains.kotlin.resolve.descriptorUtil.module
|
||||
import org.jetbrains.kotlin.resolve.scopes.DescriptorKindFilter
|
||||
import org.jetbrains.kotlin.resolve.scopes.MemberScope
|
||||
import org.jetbrains.kotlin.serialization.KonanDescriptorSerializer
|
||||
import org.jetbrains.kotlin.serialization.KonanLinkData
|
||||
import org.jetbrains.kotlin.serialization.KonanLinkData.*
|
||||
import org.jetbrains.kotlin.serialization.ProtoBuf
|
||||
import org.jetbrains.kotlin.serialization.deserialization.*
|
||||
import org.jetbrains.kotlin.storage.LockBasedStorageManager
|
||||
import org.jetbrains.kotlin.storage.StorageManager
|
||||
import org.jetbrains.kotlin.types.KotlinType
|
||||
import org.jetbrains.kotlin.types.SimpleType
|
||||
import java.util.zip.GZIPInputStream
|
||||
import java.util.zip.GZIPOutputStream
|
||||
import java.io.InputStream
|
||||
import java.io.ByteArrayInputStream
|
||||
import java.io.ByteArrayOutputStream
|
||||
|
||||
/*
|
||||
* This is Konan specific part of public descriptor
|
||||
@@ -115,12 +101,12 @@ fun createKonanPackageFragmentProvider(
|
||||
return provider
|
||||
}
|
||||
|
||||
public fun parsePackageFragment(packageData: ByteArray): PackageFragment =
|
||||
PackageFragment.parseFrom(packageData,
|
||||
public fun parsePackageFragment(packageData: ByteArray): LinkDataPackageFragment =
|
||||
LinkDataPackageFragment.parseFrom(packageData,
|
||||
KonanSerializerProtocol.extensionRegistry)
|
||||
|
||||
public fun parseModuleHeader(libraryData: ByteArray): Library =
|
||||
Library.parseFrom(libraryData,
|
||||
public fun parseModuleHeader(libraryData: ByteArray): LinkDataLibrary =
|
||||
LinkDataLibrary.parseFrom(libraryData,
|
||||
KonanSerializerProtocol.extensionRegistry)
|
||||
|
||||
public fun emptyPackages(libraryData: ByteArray)
|
||||
@@ -161,7 +147,7 @@ internal class KonanSerializationUtil(val context: Context) {
|
||||
var classSerializer: KonanDescriptorSerializer = topSerializer
|
||||
|
||||
fun serializeClass(packageName: FqName,
|
||||
builder: KonanLinkData.Classes.Builder,
|
||||
builder: KonanLinkData.LinkDataClasses.Builder,
|
||||
classDescriptor: ClassDescriptor) {
|
||||
|
||||
val previousSerializer = classSerializer
|
||||
@@ -185,7 +171,7 @@ internal class KonanSerializationUtil(val context: Context) {
|
||||
}
|
||||
|
||||
fun serializeClasses(packageName: FqName,
|
||||
builder: KonanLinkData.Classes.Builder,
|
||||
builder: KonanLinkData.LinkDataClasses.Builder,
|
||||
descriptors: Collection<DeclarationDescriptor>) {
|
||||
|
||||
for (descriptor in descriptors) {
|
||||
@@ -196,7 +182,7 @@ internal class KonanSerializationUtil(val context: Context) {
|
||||
}
|
||||
|
||||
fun serializePackage(fqName: FqName, module: ModuleDescriptor) :
|
||||
KonanLinkData.PackageFragment? {
|
||||
KonanLinkData.LinkDataPackageFragment? {
|
||||
|
||||
// TODO: ModuleDescriptor should be able to return
|
||||
// the package only with the contents of that module, without dependencies
|
||||
@@ -214,7 +200,7 @@ internal class KonanSerializationUtil(val context: Context) {
|
||||
DescriptorUtils.getAllDescriptors(fragment.getMemberScope())
|
||||
}.filter { !it.isExpectMember }
|
||||
|
||||
val classesBuilder = KonanLinkData.Classes.newBuilder()
|
||||
val classesBuilder = KonanLinkData.LinkDataClasses.newBuilder()
|
||||
|
||||
serializeClasses(fqName, classesBuilder, classifierDescriptors)
|
||||
val classesProto = classesBuilder.build()
|
||||
@@ -226,7 +212,7 @@ internal class KonanSerializationUtil(val context: Context) {
|
||||
val (stringTableProto, nameTableProto) = strings.buildProto()
|
||||
|
||||
val isEmpty = members.isEmpty() && classifierDescriptors.isEmpty()
|
||||
val fragmentBuilder = KonanLinkData.PackageFragment.newBuilder()
|
||||
val fragmentBuilder = KonanLinkData.LinkDataPackageFragment.newBuilder()
|
||||
|
||||
val fragmentProto = fragmentBuilder
|
||||
.setPackage(packageProto)
|
||||
@@ -253,7 +239,7 @@ internal class KonanSerializationUtil(val context: Context) {
|
||||
}
|
||||
|
||||
internal fun serializeModule(moduleDescriptor: ModuleDescriptor): LinkData {
|
||||
val libraryProto = KonanLinkData.Library.newBuilder()
|
||||
val libraryProto = KonanLinkData.LinkDataLibrary.newBuilder()
|
||||
libraryProto.moduleName = moduleDescriptor.name.asString()
|
||||
val fragments = mutableListOf<ByteArray>()
|
||||
val fragmentNames = mutableListOf<String>()
|
||||
|
||||
+1
@@ -18,6 +18,7 @@ package org.jetbrains.kotlin.backend.konan.serialization
|
||||
|
||||
import org.jetbrains.kotlin.backend.konan.Context
|
||||
import org.jetbrains.kotlin.descriptors.*
|
||||
import org.jetbrains.kotlin.metadata.*
|
||||
import org.jetbrains.kotlin.protobuf.ExtensionRegistryLite
|
||||
import org.jetbrains.kotlin.serialization.*
|
||||
import org.jetbrains.kotlin.types.KotlinType
|
||||
|
||||
+7
-4
@@ -17,8 +17,11 @@
|
||||
package org.jetbrains.kotlin.backend.konan.serialization
|
||||
|
||||
import org.jetbrains.kotlin.descriptors.*
|
||||
import org.jetbrains.kotlin.name.ClassId
|
||||
import org.jetbrains.kotlin.serialization.StringTableImpl
|
||||
import org.jetbrains.kotlin.resolve.DescriptorUtils
|
||||
import org.jetbrains.kotlin.resolve.descriptorUtil.classId
|
||||
import org.jetbrains.kotlin.resolve.descriptorUtil.fqNameSafe
|
||||
import org.jetbrains.kotlin.resolve.descriptorUtil.getAllSuperClassifiers
|
||||
import org.jetbrains.kotlin.resolve.descriptorUtil.module
|
||||
|
||||
@@ -35,20 +38,20 @@ class KonanStringTable : StringTableImpl() {
|
||||
}
|
||||
}
|
||||
|
||||
override fun getFqNameIndexOfLocalAnonymousClass(descriptor: ClassifierDescriptorWithTypeParameters): Int {
|
||||
override fun getLocalClassIdReplacement(descriptor: ClassifierDescriptorWithTypeParameters): ClassId? {
|
||||
return if (descriptor.containingDeclaration is CallableMemberDescriptor) {
|
||||
val superClassifiers = descriptor.getAllSuperClassifiers()
|
||||
.mapNotNull { it as ClassifierDescriptorWithTypeParameters }
|
||||
.filter { it != descriptor }
|
||||
.toList()
|
||||
if (superClassifiers.size == 1) {
|
||||
getFqNameIndex(superClassifiers[0])
|
||||
superClassifiers[0].classId
|
||||
} else {
|
||||
val superClass = superClassifiers.find { !DescriptorUtils.isInterface(it) }
|
||||
getFqNameIndex(superClass ?: descriptor.module.builtIns.any)
|
||||
superClass?.classId ?: ClassId.topLevel(descriptor.module.builtIns.any.fqNameSafe)
|
||||
}
|
||||
} else {
|
||||
super.getFqNameIndexOfLocalAnonymousClass(descriptor)
|
||||
super.getLocalClassIdReplacement(descriptor)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+6
-4
@@ -22,10 +22,12 @@ import org.jetbrains.kotlin.backend.common.push
|
||||
import org.jetbrains.kotlin.backend.konan.descriptors.allContainingDeclarations
|
||||
import org.jetbrains.kotlin.descriptors.*
|
||||
import org.jetbrains.kotlin.descriptors.impl.LocalVariableDescriptor
|
||||
import org.jetbrains.kotlin.serialization.Flags
|
||||
import org.jetbrains.kotlin.serialization.KonanIr
|
||||
import org.jetbrains.kotlin.serialization.KonanLinkData
|
||||
import org.jetbrains.kotlin.serialization.ProtoBuf
|
||||
import org.jetbrains.kotlin.metadata.deserialization.Flags
|
||||
import org.jetbrains.kotlin.metadata.KonanIr
|
||||
import org.jetbrains.kotlin.metadata.KonanLinkData
|
||||
import org.jetbrains.kotlin.metadata.ProtoBuf
|
||||
import org.jetbrains.kotlin.metadata.deserialization.NameResolverImpl
|
||||
import org.jetbrains.kotlin.metadata.deserialization.TypeTable
|
||||
import org.jetbrains.kotlin.serialization.deserialization.*
|
||||
import org.jetbrains.kotlin.serialization.deserialization.descriptors.DeserializedClassDescriptor
|
||||
import org.jetbrains.kotlin.serialization.deserialization.descriptors.VersionRequirementTable
|
||||
|
||||
+1
-1
@@ -30,7 +30,7 @@ import org.jetbrains.kotlin.descriptors.impl.LocalVariableDescriptor
|
||||
import org.jetbrains.kotlin.descriptors.impl.PropertyDescriptorImpl
|
||||
import org.jetbrains.kotlin.ir.descriptors.IrTemporaryVariableDescriptor
|
||||
import org.jetbrains.kotlin.serialization.KonanDescriptorSerializer
|
||||
import org.jetbrains.kotlin.serialization.KonanIr
|
||||
import org.jetbrains.kotlin.metadata.KonanIr
|
||||
import org.jetbrains.kotlin.types.KotlinType
|
||||
|
||||
/*
|
||||
|
||||
+4
-4
@@ -18,10 +18,10 @@ package org.jetbrains.kotlin.backend.konan.serialization
|
||||
|
||||
import org.jetbrains.kotlin.descriptors.*
|
||||
import org.jetbrains.kotlin.serialization.deserialization.descriptors.*
|
||||
import org.jetbrains.kotlin.serialization.KonanIr
|
||||
import org.jetbrains.kotlin.serialization.KonanLinkData
|
||||
import org.jetbrains.kotlin.serialization.KonanLinkData.*
|
||||
import org.jetbrains.kotlin.serialization.ProtoBuf
|
||||
import org.jetbrains.kotlin.metadata.KonanIr
|
||||
import org.jetbrains.kotlin.metadata.KonanLinkData
|
||||
import org.jetbrains.kotlin.metadata.KonanLinkData.*
|
||||
import org.jetbrains.kotlin.metadata.ProtoBuf
|
||||
|
||||
fun newUniqId(index: Long): KonanIr.UniqId =
|
||||
KonanIr.UniqId.newBuilder().setIndex(index).build()
|
||||
|
||||
+5
-5
@@ -42,11 +42,11 @@ import org.jetbrains.kotlin.ir.util.createParameterDeclarations
|
||||
import org.jetbrains.kotlin.ir.util.setOverrides
|
||||
import org.jetbrains.kotlin.ir.util.setSuperSymbols
|
||||
import org.jetbrains.kotlin.serialization.KonanDescriptorSerializer
|
||||
import org.jetbrains.kotlin.serialization.KonanIr
|
||||
import org.jetbrains.kotlin.serialization.KonanIr.IrConst.ValueCase.*
|
||||
import org.jetbrains.kotlin.serialization.KonanIr.IrOperation.OperationCase.*
|
||||
import org.jetbrains.kotlin.serialization.KonanIr.IrVarargElement.VarargElementCase.*
|
||||
import org.jetbrains.kotlin.serialization.KonanLinkData
|
||||
import org.jetbrains.kotlin.metadata.KonanIr
|
||||
import org.jetbrains.kotlin.metadata.KonanIr.IrConst.ValueCase.*
|
||||
import org.jetbrains.kotlin.metadata.KonanIr.IrOperation.OperationCase.*
|
||||
import org.jetbrains.kotlin.metadata.KonanIr.IrVarargElement.VarargElementCase.*
|
||||
import org.jetbrains.kotlin.metadata.KonanLinkData
|
||||
import org.jetbrains.kotlin.serialization.deserialization.descriptors.DeserializedClassConstructorDescriptor
|
||||
import org.jetbrains.kotlin.serialization.deserialization.descriptors.DeserializedPropertyDescriptor
|
||||
import org.jetbrains.kotlin.serialization.deserialization.descriptors.DeserializedSimpleFunctionDescriptor
|
||||
|
||||
+5
-4
@@ -18,9 +18,10 @@ package org.jetbrains.kotlin.backend.konan.serialization
|
||||
|
||||
import org.jetbrains.kotlin.descriptors.*
|
||||
import org.jetbrains.kotlin.name.FqName
|
||||
import org.jetbrains.kotlin.serialization.ProtoBuf
|
||||
import org.jetbrains.kotlin.serialization.ProtoBuf.QualifiedNameTable.QualifiedName
|
||||
import org.jetbrains.kotlin.serialization.deserialization.NameResolverImpl
|
||||
import org.jetbrains.kotlin.metadata.ProtoBuf
|
||||
import org.jetbrains.kotlin.metadata.ProtoBuf.QualifiedNameTable.QualifiedName
|
||||
import org.jetbrains.kotlin.metadata.deserialization.NameResolverImpl
|
||||
import org.jetbrains.kotlin.serialization.deserialization.getClassId
|
||||
|
||||
// TODO Come up with a better file name.
|
||||
|
||||
@@ -39,7 +40,7 @@ internal fun NameResolverImpl.getDescriptorByFqNameIndex(
|
||||
QualifiedName.Kind.LOCAL ->
|
||||
return module.findClassAcrossModuleDependencies(this.getClassId(fqNameIndex))!!
|
||||
QualifiedName.Kind.PACKAGE ->
|
||||
return module.getPackage(packageName)
|
||||
return module.getPackage(FqName(packageName))
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+1
-1
@@ -15,7 +15,7 @@
|
||||
*/
|
||||
|
||||
syntax = "proto2";
|
||||
package org.jetbrains.kotlin.serialization;
|
||||
package org.jetbrains.kotlin.metadata;
|
||||
|
||||
import "org/jetbrains/kotlin/backend/konan/serialization/google_descriptor.proto1";
|
||||
|
||||
|
||||
+181
-13
@@ -14,8 +14,7 @@
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
syntax = "proto2";
|
||||
package org.jetbrains.kotlin.serialization;
|
||||
package org.jetbrains.kotlin.metadata;
|
||||
|
||||
import "org/jetbrains/kotlin/backend/konan/serialization/ext_options.proto1";
|
||||
|
||||
@@ -122,7 +121,7 @@ message Type {
|
||||
optional Type flexible_upper_bound = 5;
|
||||
optional int32 flexible_upper_bound_id = 8;
|
||||
|
||||
// Only one of the following values should be present
|
||||
// Only one of [class_name, type_parameter, type_parameter_name, type_alias_name] should be present
|
||||
|
||||
optional int32 class_name = 6 [(fq_name_id_in_table) = true];
|
||||
optional int32 type_parameter = 7; // id of the type parameter
|
||||
@@ -133,12 +132,18 @@ message Type {
|
||||
// Top level types are always fully expanded
|
||||
optional int32 type_alias_name = 12 [(fq_name_id_in_table) = true];
|
||||
|
||||
// Outer type may be present only if class_name or type_alias_name is present
|
||||
optional Type outer_type = 10;
|
||||
optional int32 outer_type_id = 11;
|
||||
|
||||
optional Type abbreviated_type = 13;
|
||||
optional int32 abbreviated_type_id = 14;
|
||||
|
||||
/*
|
||||
suspend
|
||||
*/
|
||||
optional int32 flags = 1;
|
||||
|
||||
extensions 100 to 199;
|
||||
}
|
||||
|
||||
@@ -157,7 +162,7 @@ message TypeParameter {
|
||||
optional Variance variance = 4 [default = INV];
|
||||
|
||||
repeated Type upper_bound = 5;
|
||||
repeated int32 upper_bound_id = 6;
|
||||
repeated int32 upper_bound_id = 6 [packed = true];
|
||||
|
||||
extensions 100 to 999;
|
||||
}
|
||||
@@ -181,6 +186,9 @@ message Class {
|
||||
ClassKind
|
||||
isInner
|
||||
isData
|
||||
isExternal
|
||||
isExpect
|
||||
isInline
|
||||
*/
|
||||
optional int32 flags = 1 [default = 6 /* public final class, no annotations */];
|
||||
|
||||
@@ -202,9 +210,16 @@ message Class {
|
||||
|
||||
repeated EnumEntry enum_entry = 13;
|
||||
|
||||
repeated int32 sealed_subclass_fq_name = 16 [packed = true, (fq_name_id_in_table) = true];
|
||||
|
||||
optional TypeTable type_table = 30;
|
||||
|
||||
extensions 100 to 199;
|
||||
// Index into the VersionRequirementTable
|
||||
optional int32 version_requirement = 31;
|
||||
|
||||
optional VersionRequirementTable version_requirement_table = 32;
|
||||
|
||||
extensions 100 to 18999;
|
||||
}
|
||||
|
||||
message Package {
|
||||
@@ -214,6 +229,8 @@ message Package {
|
||||
|
||||
optional TypeTable type_table = 30;
|
||||
|
||||
optional VersionRequirementTable version_requirement_table = 32;
|
||||
|
||||
extensions 100 to 199;
|
||||
}
|
||||
|
||||
@@ -235,7 +252,10 @@ message Constructor {
|
||||
|
||||
repeated ValueParameter value_parameter = 2;
|
||||
|
||||
extensions 100 to 199;
|
||||
// Index into the VersionRequirementTable
|
||||
optional int32 version_requirement = 31;
|
||||
|
||||
extensions 100 to 18999;
|
||||
}
|
||||
|
||||
message Function {
|
||||
@@ -249,6 +269,8 @@ message Function {
|
||||
isInline
|
||||
isTailrec
|
||||
isExternal
|
||||
isSuspend
|
||||
isExpect
|
||||
*/
|
||||
optional int32 flags = 9 [default = 6 /* public final function, no annotations */];
|
||||
optional int32 old_flags = 1 [default = 6];
|
||||
@@ -267,7 +289,12 @@ message Function {
|
||||
|
||||
optional TypeTable type_table = 30;
|
||||
|
||||
extensions 100 to 199;
|
||||
// Index into the VersionRequirementTable
|
||||
optional int32 version_requirement = 31;
|
||||
|
||||
optional Contract contract = 32;
|
||||
|
||||
extensions 100 to 18999;
|
||||
}
|
||||
|
||||
message Property {
|
||||
@@ -280,8 +307,11 @@ message Property {
|
||||
hasGetter
|
||||
hasSetter
|
||||
isConst
|
||||
lateinit
|
||||
isLateinit
|
||||
hasConstant
|
||||
isExternal
|
||||
isDelegated
|
||||
isExpect
|
||||
*/
|
||||
optional int32 flags = 11 [default = 518 /* public (6) final property with getter (512) */];
|
||||
optional int32 old_flags = 1 [default = 2054];
|
||||
@@ -305,17 +335,24 @@ message Property {
|
||||
isNotDefault
|
||||
isExternal
|
||||
isInline
|
||||
*/
|
||||
optional int32 getter_flags = 7 /* absent => same as property */;
|
||||
optional int32 setter_flags = 8 /* absent => same as property */;
|
||||
|
||||
extensions 100 to 199;
|
||||
If getter_flags or setter_flags are absent, their value should be computed as follows:
|
||||
- hasAnnotations, Visibility, Modality have the same value as in the property flags
|
||||
- all other flags are false
|
||||
*/
|
||||
optional int32 getter_flags = 7;
|
||||
optional int32 setter_flags = 8;
|
||||
|
||||
// Index into the VersionRequirementTable
|
||||
optional int32 version_requirement = 31;
|
||||
|
||||
extensions 100 to 18999;
|
||||
}
|
||||
|
||||
message ValueParameter {
|
||||
/*
|
||||
declaresDefault
|
||||
hasAnnotations
|
||||
declaresDefault
|
||||
isCrossinline
|
||||
isNoinline
|
||||
*/
|
||||
@@ -351,6 +388,9 @@ message TypeAlias {
|
||||
|
||||
repeated Annotation annotation = 8;
|
||||
|
||||
// Index into the VersionRequirementTable
|
||||
optional int32 version_requirement = 31;
|
||||
|
||||
extensions 100 to 199;
|
||||
}
|
||||
|
||||
@@ -385,3 +425,131 @@ enum MemberKind {
|
||||
DELEGATION = 2;
|
||||
SYNTHESIZED = 3;
|
||||
}
|
||||
|
||||
message VersionRequirement {
|
||||
enum Level {
|
||||
WARNING = 0;
|
||||
ERROR = 1;
|
||||
HIDDEN = 2;
|
||||
}
|
||||
|
||||
enum VersionKind {
|
||||
LANGUAGE_VERSION = 0;
|
||||
COMPILER_VERSION = 1;
|
||||
API_VERSION = 2;
|
||||
}
|
||||
|
||||
// Kotlin version, since which this declaration is accessible, in the following format (encoded version is "major.minor.patch"):
|
||||
// (patch << 7) + (minor << 3) + major
|
||||
// Compilers with version less than this value should report a diagnostic if this declaration is selected as the resolution result
|
||||
optional int32 version = 1;
|
||||
|
||||
// Version in base 256, in case we run out of space to store the version in the optimized form. Has priority over 'version'.
|
||||
// (patch << 16) + (minor << 8) + major
|
||||
optional int32 version_full = 2;
|
||||
|
||||
// Level of the reported diagnostic
|
||||
optional Level level = 3 [default = ERROR];
|
||||
|
||||
// Error code, to be looked up on the website
|
||||
optional int32 error_code = 4;
|
||||
|
||||
// Diagnostic message
|
||||
optional int32 message = 5 [(string_id_in_table) = true];
|
||||
|
||||
// Which version is this requirement for. For example, if version_kind = API_VERSION, this declaration requires the API version
|
||||
// (the "-api-version" argument value when compiling the call site) to be of at least the specified value
|
||||
optional VersionKind version_kind = 6 [default = LANGUAGE_VERSION];
|
||||
}
|
||||
|
||||
message VersionRequirementTable {
|
||||
repeated VersionRequirement requirement = 1;
|
||||
}
|
||||
|
||||
// A part of the package, which is used to serialize .kjsm/.meta.js, .kotlin_builtins and .kotlin_metadata files.
|
||||
// Is not used in the JVM back-end
|
||||
message PackageFragment {
|
||||
optional StringTable strings = 1;
|
||||
optional QualifiedNameTable qualified_names = 2;
|
||||
|
||||
optional Package package = 3;
|
||||
|
||||
repeated Class class = 4;
|
||||
|
||||
extensions 100 to 199;
|
||||
}
|
||||
|
||||
|
||||
|
||||
message Contract {
|
||||
repeated Effect effect = 1;
|
||||
}
|
||||
|
||||
message Effect {
|
||||
// This enum controls which effect this message contains and how 'effectConstructorArguments'
|
||||
// should be parsed.
|
||||
// Each enum value documented in the following syntax: "EffectName(arg1: T1, arg2: T2, ...)"
|
||||
// Those arguments are expected to be found in 'effectConstructorArguments' in exactly the same
|
||||
// order and amount as defined by signature, otherwise message should be dropped.
|
||||
enum EffectType {
|
||||
// Returns(value: ConstantValue?)
|
||||
RETURNS_CONSTANT = 0;
|
||||
|
||||
// CallsInPlace(callable: ParameterReference)
|
||||
// Additionally, InvocationKind in the field 'kind' may be provided to define exact amount of invocations.
|
||||
CALLS = 1;
|
||||
|
||||
// ReturnsNotNull()
|
||||
RETURNS_NOT_NULL = 2;
|
||||
}
|
||||
optional EffectType effect_type = 1;
|
||||
|
||||
repeated Expression effect_constructor_argument = 2;
|
||||
|
||||
// If present, then whole message is clause of form 'Effect -> Expression', where 'Effect'
|
||||
// is given by other fields in this message, and 'Expression' is stored in this field.
|
||||
optional Expression conclusion_of_conditional_effect = 3;
|
||||
|
||||
enum InvocationKind {
|
||||
AT_MOST_ONCE = 0;
|
||||
EXACTLY_ONCE = 1;
|
||||
AT_LEAST_ONCE = 2;
|
||||
}
|
||||
optional InvocationKind kind = 4;
|
||||
}
|
||||
|
||||
// We use some trickery to optimize memory footprint of contract-expressions:
|
||||
// exact type of Expression is determined based on its contents.
|
||||
message Expression {
|
||||
/*
|
||||
isNegated => this expression should be negated
|
||||
isIsNullPredicate => this expression is IsNullPredicate with 'variableName' as argument
|
||||
*/
|
||||
optional int32 flags = 1;
|
||||
|
||||
// stored as index in valueParameters list of owner-function in 1-indexation
|
||||
// Index '0' is reserved for extension receiver
|
||||
optional int32 value_parameter_reference = 2;
|
||||
|
||||
enum ConstantValue {
|
||||
TRUE = 0;
|
||||
FALSE = 1;
|
||||
NULL = 2;
|
||||
}
|
||||
optional ConstantValue constant_value = 3;
|
||||
|
||||
// present => this expression is IsInstancePredicate, with 'variableName' as LHS
|
||||
// and with type encoded in either one of next two fields as RHS.
|
||||
optional Type is_instance_type = 4;
|
||||
optional int32 is_instance_type_id = 5;
|
||||
|
||||
// non-empty => this expression is boolean formula of form 'andArguments[0] && andArguments[1] && ...'
|
||||
// Additionally, if first argument of formula is primitive expression (i.e. predicate or value),
|
||||
// it is optimized and embedded straight into this message
|
||||
repeated Expression and_argument = 6;
|
||||
|
||||
// non-empty => this expression is boolean formula of form 'orArguments[0] || andArguments[1] || ...'
|
||||
// Additionally, if first argument of formula is primitive expression (i.e. predicate or value),
|
||||
// it is optimized and embedded straight into this message.
|
||||
repeated Expression or_argument = 7;
|
||||
}
|
||||
+2
-2
@@ -20,8 +20,8 @@ remoteRoot=konan_tests
|
||||
#kotlinCompilerModule=org.jetbrains.kotlin:kotlin-compiler:1.1-SNAPSHOT
|
||||
# Download artifacts of https://teamcity.jetbrains.com/viewType.html?buildTypeId=Kotlin_120_Compiler
|
||||
testDataVersion=1226829:id
|
||||
kotlinCompilerRepo=https://teamcity.jetbrains.com/guestAuth/app/rest/builds/buildType:(id:Kotlin_dev_CompilerAllPlugins),number:1.2.40-dev-837/artifacts/content/maven
|
||||
kotlinVersion=1.2.40-dev-837
|
||||
kotlinCompilerRepo=https://teamcity.jetbrains.com/guestAuth/app/rest/builds/buildType:(id:Kotlin_dev_CompilerAllPlugins),number:1.2.40-dev-1038/artifacts/content/maven
|
||||
kotlinVersion=1.2.40-dev-1038
|
||||
konanVersion=0.6.1
|
||||
org.gradle.jvmargs='-Dfile.encoding=UTF-8'
|
||||
|
||||
|
||||
@@ -30,7 +30,7 @@ import org.jetbrains.kotlin.descriptors.impl.ModuleDescriptorImpl
|
||||
import org.jetbrains.kotlin.konan.file.File
|
||||
import org.jetbrains.kotlin.konan.target.Distribution
|
||||
import org.jetbrains.kotlin.konan.target.PlatformManager
|
||||
import org.jetbrains.kotlin.serialization.KonanLinkData
|
||||
import org.jetbrains.kotlin.metadata.KonanLinkData
|
||||
import java.lang.System.out
|
||||
import kotlin.system.exitProcess
|
||||
|
||||
@@ -88,7 +88,7 @@ fun error(text: String) {
|
||||
val defaultRepository = File(File.userHome, ".konan/klib")
|
||||
|
||||
open class ModuleDeserializer(val library: ByteArray) {
|
||||
protected val moduleHeader: KonanLinkData.Library
|
||||
protected val moduleHeader: KonanLinkData.LinkDataLibrary
|
||||
get() = parseModuleHeader(library)
|
||||
|
||||
val moduleName: String
|
||||
|
||||
Reference in New Issue
Block a user