[kotlin compiler][update] 1.2.70-dev-616

This commit is contained in:
Vasily Levchenko
2018-07-25 12:30:07 +03:00
parent 8740443a4a
commit 34fe09c59c
13 changed files with 79 additions and 47 deletions
@@ -20,6 +20,7 @@ import com.intellij.openapi.Disposable
import org.jetbrains.annotations.NotNull
import org.jetbrains.annotations.Nullable
import org.jetbrains.kotlin.backend.konan.*
import org.jetbrains.kotlin.backend.konan.serialization.KonanMetadataVersion
import org.jetbrains.kotlin.cli.common.CLICompiler
import org.jetbrains.kotlin.cli.common.CLITool
import org.jetbrains.kotlin.cli.common.CommonCompilerPerformanceManager
@@ -33,11 +34,13 @@ import org.jetbrains.kotlin.konan.KonanVersion
import org.jetbrains.kotlin.konan.file.File
import org.jetbrains.kotlin.konan.target.CompilerOutputKind
import org.jetbrains.kotlin.konan.util.profile
import org.jetbrains.kotlin.metadata.deserialization.BinaryVersion
import org.jetbrains.kotlin.psi.KtFile
import org.jetbrains.kotlin.utils.KotlinPaths
private class K2NativeCompilerPerformanceManager: CommonCompilerPerformanceManager("Kotlin to Native Compiler")
class K2Native : CLICompiler<K2NativeCompilerArguments>() {
override fun createMetadataVersion(p0: IntArray): BinaryVersion = KonanMetadataVersion(*p0)
private val performanceManager by lazy {
K2NativeCompilerPerformanceManager()
@@ -64,6 +67,12 @@ class K2Native : CLICompiler<K2NativeCompilerArguments>() {
configuration.report(ERROR, "You have not specified any compilation arguments. No output has been produced.")
}
/* Set default version of metadata version */
val metadataVersionString = arguments.metadataVersion
if (metadataVersionString == null) {
configuration.put(CommonConfigurationKeys.METADATA_VERSION, KonanMetadataVersion.INSTANCE)
}
if (konanConfig.linkOnly) {
configuration.report(WARNING, "You have not specified any source files. " +
"Only libraries will be used to produce the output binary.")
@@ -24,6 +24,8 @@ import org.jetbrains.kotlin.backend.konan.serialization.KonanSerializationUtil
import org.jetbrains.kotlin.backend.konan.serialization.markBackingFields
import org.jetbrains.kotlin.cli.common.messages.AnalyzerWithCompilerReport
import org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreEnvironment
import org.jetbrains.kotlin.config.CommonConfigurationKeys
import org.jetbrains.kotlin.config.CompilerConfigurationKey
import org.jetbrains.kotlin.config.kotlinSourceRoots
import org.jetbrains.kotlin.config.languageVersionSettings
import org.jetbrains.kotlin.psi2ir.Psi2IrConfiguration
@@ -83,7 +85,7 @@ fun runTopLevelPhases(konanConfig: KonanConfig, environment: KotlinCoreEnvironme
}
phaser.phase(KonanPhase.SERIALIZER) {
markBackingFields(context)
val serializer = KonanSerializationUtil(context)
val serializer = KonanSerializationUtil(context, context.config.configuration.get(CommonConfigurationKeys.METADATA_VERSION)!!)
context.serializedLinkData =
serializer.serializeModule(context.moduleDescriptor)
}
@@ -73,13 +73,11 @@ class KonanBuiltIns(storageManager: StorageManager) : KotlinBuiltIns(storageMana
}
object KonanPlatform : TargetPlatform("Konan") {
override val multiTargetPlatform = MultiTargetPlatform.Specific(platformName)
override fun getDefaultImports(includeKotlinComparisons: Boolean): List<ImportPath> {
return Common.getDefaultImports(includeKotlinComparisons) + listOf(
ImportPath.fromString("konan.*")
)
override fun computePlatformSpecificDefaultImports(storageManager: StorageManager, result: MutableList<ImportPath>) {
result.add(ImportPath.fromString("konan.*"))
}
override val multiTargetPlatform = MultiTargetPlatform.Specific(platformName)
override val platformConfigurator: PlatformConfigurator = KonanPlatformConfigurator
}
@@ -17,8 +17,6 @@
package org.jetbrains.kotlin.backend.konan.ir
import org.jetbrains.kotlin.backend.common.COROUTINE_SUSPENDED_NAME
import org.jetbrains.kotlin.backend.common.INTERCEPTED_NAME
import org.jetbrains.kotlin.backend.common.SUSPEND_COROUTINE_UNINTERCEPTED_OR_RETURN_NAME
import org.jetbrains.kotlin.backend.common.atMostOne
import org.jetbrains.kotlin.backend.common.ir.Ir
import org.jetbrains.kotlin.backend.common.ir.Symbols
@@ -344,14 +342,6 @@ internal class KonanSymbols(context: Context, val symbolTable: SymbolTable): Sym
private val coroutinesPackage = context.builtIns.builtInsModule.getPackage(
context.config.configuration.languageVersionSettings.coroutinesPackageFqName()).memberScope
val intercepted = coroutinesIntrinsicsPackage
.getContributedFunctions(INTERCEPTED_NAME, NoLookupLocation.FROM_BACKEND)
.single()
val suspendCoroutineUninterceptedOrReturn = coroutinesIntrinsicsPackage
.getContributedFunctions(SUSPEND_COROUTINE_UNINTERCEPTED_OR_RETURN_NAME, NoLookupLocation.FROM_BACKEND)
.single()
val coroutineContextGetter = coroutinesPackage
.getContributedVariables(Name.identifier("coroutineContext"), NoLookupLocation.FROM_BACKEND)
.single()
@@ -99,14 +99,14 @@ internal class FunctionInlining(val context: Context): IrElementTransformerVoidW
private fun getFunctionDeclaration(descriptor: FunctionDescriptor): IrFunction? =
descriptor.resolveFakeOverride().original.let {
when (it) {
context.ir.symbols.intercepted ->
when {
it.isBuiltInIntercepted(context.config.configuration.languageVersionSettings) ->
getFunctionDeclaration(context.ir.symbols.konanIntercepted.descriptor)
context.ir.symbols.suspendCoroutineUninterceptedOrReturn ->
it.isBuiltInSuspendCoroutineUninterceptedOrReturn(context.config.configuration.languageVersionSettings) ->
getFunctionDeclaration(context.ir.symbols.konanSuspendCoroutineUninterceptedOrReturn.descriptor)
context.ir.symbols.coroutineContextGetter ->
it == context.ir.symbols.coroutineContextGetter ->
getFunctionDeclaration(context.ir.symbols.konanCoroutineContextGetter.descriptor)
else -> {
@@ -32,16 +32,14 @@ class KonanClassDataFinder(
val proto = fragment.classes
val nameList = proto.getClassNameList()
val index = nameList.indexOfFirst({
nameResolver.getClassId(it) == classId })
if (index == -1)
error("Could not find serialized class ${classId}")
val index = nameList.indexOfFirst {
nameResolver.getClassId(it) == classId }
if (index == -1)
error("Could not find serialized class $classId")
val foundClass = proto.getClasses(index)
if (foundClass == null)
error("Could not find data for serialized class ${classId}")
return ClassData(nameResolver, foundClass, SourceElement.NO_SOURCE)
val foundClass = proto.getClasses(index) ?: error("Could not find data for serialized class $classId")
/* TODO: binary version supposed to be read from protobuf. */
return ClassData(nameResolver, foundClass, KonanMetadataVersion.INSTANCE, SourceElement.NO_SOURCE)
}
}
@@ -164,7 +164,7 @@ class KonanDescriptorSerializer private constructor(
builder.versionRequirementTable = versionRequirementTableProto
}
extension.serializeClass(classDescriptor, builder)
extension.serializeClass(classDescriptor, builder, versionRequirementTable)
return builder
}
@@ -256,7 +256,7 @@ class KonanDescriptorSerializer private constructor(
builder.versionRequirement = writeVersionRequirement(LanguageFeature.Coroutines)
}
extension.serializeProperty(descriptor, builder)
extension.serializeProperty(descriptor, builder, versionRequirementTable)
/* Konan specific chunk */
if (extension is IrAwareExtension) {
@@ -0,0 +1,32 @@
package org.jetbrains.kotlin.backend.konan.serialization
import org.jetbrains.kotlin.metadata.deserialization.BinaryVersion
/*
* Copyright 2010-2015 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.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
class KonanMetadataVersion(vararg numbers: Int): BinaryVersion(*numbers){
override fun isCompatible(): Boolean = this.major == 1 && this.minor == 0
companion object {
@JvmField
val INSTANCE = KonanMetadataVersion(1, 0, 0)
@JvmField
val INVALID_VERSION = KonanMetadataVersion()
}
}
@@ -61,8 +61,9 @@ class KonanPackageFragment(
}
private val memberScope_ by lazy {
/* TODO: we fake proto binary versioning for now. */
DeserializedPackageMemberScope(this, proto.getPackage(),
nameResolver, /* containerSource = */ null,
nameResolver, KonanMetadataVersion.INSTANCE,/* containerSource = */ null,
components, { loadClassNames() })
}
@@ -30,6 +30,7 @@ import org.jetbrains.kotlin.incremental.components.LookupTracker
import org.jetbrains.kotlin.metadata.KonanLinkData
import org.jetbrains.kotlin.metadata.KonanLinkData.*
import org.jetbrains.kotlin.metadata.ProtoBuf
import org.jetbrains.kotlin.metadata.deserialization.BinaryVersion
import org.jetbrains.kotlin.name.FqName
import org.jetbrains.kotlin.name.Name
import org.jetbrains.kotlin.resolve.CompilerDeserializationConfiguration
@@ -140,9 +141,9 @@ internal fun deserializeModule(languageVersionSettings: LanguageVersionSettings,
/* ------------ Serializer part ------------------------------------------*/
internal class KonanSerializationUtil(val context: Context) {
internal class KonanSerializationUtil(val context: Context, metadataVersion: BinaryVersion) {
val serializerExtension = KonanSerializerExtension(context)
val serializerExtension = KonanSerializerExtension(context, metadataVersion)
val topSerializer = KonanDescriptorSerializer.createTopLevel(serializerExtension)
var classSerializer: KonanDescriptorSerializer = topSerializer
@@ -19,11 +19,13 @@ 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.metadata.deserialization.BinaryVersion
import org.jetbrains.kotlin.metadata.serialization.MutableVersionRequirementTable
import org.jetbrains.kotlin.protobuf.ExtensionRegistryLite
import org.jetbrains.kotlin.serialization.*
import org.jetbrains.kotlin.types.KotlinType
internal class KonanSerializerExtension(val context: Context) :
internal class KonanSerializerExtension(val context: Context, override val metadataVersion: BinaryVersion) :
KotlinSerializerExtensionBase(KonanSerializerProtocol), IrAwareExtension {
val inlineDescriptorTable = DescriptorTable(context.irBuiltIns)
@@ -59,9 +61,9 @@ internal class KonanSerializerExtension(val context: Context) :
super.serializeConstructor(descriptor, proto)
}
override fun serializeClass(descriptor: ClassDescriptor, proto: ProtoBuf.Class.Builder) {
override fun serializeClass(descriptor: ClassDescriptor, proto: ProtoBuf.Class.Builder, versionRequirementTable: MutableVersionRequirementTable) {
super.serializeClass(descriptor, proto)
super.serializeClass(descriptor, proto, versionRequirementTable)
}
override fun serializeFunction(descriptor: FunctionDescriptor, proto: ProtoBuf.Function.Builder) {
@@ -69,7 +71,7 @@ internal class KonanSerializerExtension(val context: Context) :
super.serializeFunction(descriptor, proto)
}
override fun serializeProperty(descriptor: PropertyDescriptor, proto: ProtoBuf.Property.Builder) {
override fun serializeProperty(descriptor: PropertyDescriptor, proto: ProtoBuf.Property.Builder, versionRequirementTable: MutableVersionRequirementTable) {
val variable = originalVariables[descriptor]
if (variable != null) {
proto.setExtension(KonanLinkData.usedAsVariable, true)
@@ -78,7 +80,7 @@ internal class KonanSerializerExtension(val context: Context) :
proto.setExtension(KonanLinkData.hasBackingField,
context.ir.propertiesWithBackingFields.contains(descriptor))
super.serializeProperty(descriptor, proto)
super.serializeProperty(descriptor, proto, versionRequirementTable)
}
override fun addFunctionIR(proto: ProtoBuf.Function.Builder, serializedIR: String)
@@ -22,13 +22,10 @@ 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.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.metadata.deserialization.VersionRequirementTable
import org.jetbrains.kotlin.metadata.deserialization.*
import org.jetbrains.kotlin.serialization.deserialization.*
import org.jetbrains.kotlin.serialization.deserialization.descriptors.DeserializedClassDescriptor
@@ -74,8 +71,9 @@ class LocalDeclarationDeserializer(val rootDescriptor: DeclarationDescriptor) {
fun newContext(descriptor: DeclarationDescriptor): DeserializationContext {
if (descriptor is KonanPackageFragment) {
val packageTypeTable = TypeTable(pkg.proto.getPackage().typeTable)
/* TODO: Check metadata version usege here. */
return components.createContext(
pkg, nameResolver, packageTypeTable, VersionRequirementTable.EMPTY, null)
pkg, nameResolver, packageTypeTable, VersionRequirementTable.EMPTY, KonanMetadataVersion.INSTANCE, null)
}
// Only packages and classes have their type tables.
@@ -105,7 +103,8 @@ class LocalDeclarationDeserializer(val rootDescriptor: DeclarationDescriptor) {
fun deserializeInlineType(type: ProtoBuf.Type) = typeDeserializer.type(type)
fun deserializeClass(irProto: KonanIr.KotlinDescriptor): ClassDescriptor {
return DeserializedClassDescriptor(parentContext, irProto.irLocalDeclaration.descriptor.clazz, nameResolver, SourceElement.NO_SOURCE)
/* TODO: metadata version should be fixed. */
return DeserializedClassDescriptor(parentContext, irProto.irLocalDeclaration.descriptor.clazz, nameResolver, KonanMetadataVersion.INSTANCE, SourceElement.NO_SOURCE)
}
+2 -2
View File
@@ -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.70-dev-402,tag:kotlin-native,pinned:true/artifacts/content/maven
kotlinVersion=1.2.70-dev-402
kotlinCompilerRepo=https://teamcity.jetbrains.com/guestAuth/app/rest/builds/buildType:(id:Kotlin_dev_CompilerAllPlugins),number:1.2.70-dev-616,tag:kotlin-native,pinned:true/artifacts/content/maven
kotlinVersion=1.2.70-dev-616
konanVersion=0.9
org.gradle.jvmargs='-Dfile.encoding=UTF-8'