[kotlin compiler][update] 1.2.50-dev-1070

This commit is contained in:
Vasily Levchenko
2018-04-28 19:00:40 +03:00
parent ebbf86b42d
commit ef44a0dd7b
26 changed files with 107 additions and 57 deletions
@@ -23,6 +23,7 @@ import org.jetbrains.kotlin.backend.common.validateIrModule
import org.jetbrains.kotlin.backend.jvm.descriptors.initialize
import org.jetbrains.kotlin.backend.konan.descriptors.*
import org.jetbrains.kotlin.backend.common.DumpIrTreeWithDescriptorsVisitor
import org.jetbrains.kotlin.backend.common.descriptors.DescriptorsFactory
import org.jetbrains.kotlin.backend.konan.ir.KonanIr
import org.jetbrains.kotlin.backend.konan.library.KonanLibraryWriter
import org.jetbrains.kotlin.backend.konan.library.LinkData
@@ -168,6 +169,9 @@ internal class SpecialDeclarationsFactory(val context: Context) {
}
internal class Context(config: KonanConfig) : KonanBackendContext(config) {
override val descriptorsFactory: DescriptorsFactory
get() = TODO("not implemented")
override fun getClass(fqName: FqName): ClassDescriptor {
TODO("not implemented")
}
@@ -30,6 +30,7 @@ import org.jetbrains.kotlin.ir.util.*
import org.jetbrains.kotlin.name.Name
import org.jetbrains.kotlin.resolve.scopes.MemberScope
import org.jetbrains.kotlin.resolve.scopes.receivers.ImplicitClassReceiver
import org.jetbrains.kotlin.storage.LockBasedStorageManager
import org.jetbrains.kotlin.types.TypeProjectionImpl
import org.jetbrains.kotlin.types.TypeSubstitutor
import org.jetbrains.kotlin.types.Variance
@@ -53,7 +54,7 @@ internal class EnumSpecialDeclarationsFactory(val context: Context) {
val endOffset = enumClassDescriptor.endOffsetOrUndefined
val implObjectDescriptor = ClassDescriptorImpl(enumClassDescriptor, "OBJECT".synthesizedName, Modality.FINAL,
ClassKind.OBJECT, listOf(context.builtIns.anyType), SourceElement.NO_SOURCE, false)
ClassKind.OBJECT, listOf(context.builtIns.anyType), SourceElement.NO_SOURCE, false, LockBasedStorageManager.NO_LOCKS)
val valuesProperty = createEnumValuesField(enumClassDescriptor, implObjectDescriptor)
val valuesField = IrFieldImpl(startOffset, endOffset, DECLARATION_ORIGIN_ENUM, valuesProperty)
@@ -25,6 +25,7 @@ import org.jetbrains.kotlin.descriptors.impl.ClassDescriptorImpl
import org.jetbrains.kotlin.name.ClassId
import org.jetbrains.kotlin.name.FqName
import org.jetbrains.kotlin.name.Name
import org.jetbrains.kotlin.storage.LockBasedStorageManager
import org.jetbrains.kotlin.storage.StorageManager
import org.jetbrains.kotlin.storage.getValue
@@ -47,7 +48,7 @@ class KonanBuiltInClassDescriptorFactory(
ClassDescriptorImpl(
computeContainingDeclaration(moduleDescriptor),
CLONEABLE_NAME, Modality.ABSTRACT, ClassKind.INTERFACE, listOf(moduleDescriptor.builtIns.anyType),
SourceElement.NO_SOURCE, /* isExternal = */ false
SourceElement.NO_SOURCE, /* isExternal = */ false, LockBasedStorageManager.NO_LOCKS
).apply {
initialize(CloneableClassScope(storageManager, this), emptySet(), null)
}
@@ -18,11 +18,12 @@ package org.jetbrains.kotlin.backend.konan
import org.jetbrains.kotlin.backend.konan.descriptors.findPackage
import org.jetbrains.kotlin.backend.konan.descriptors.getStringValue
import org.jetbrains.kotlin.backend.konan.irasdescriptors.annotations
import org.jetbrains.kotlin.backend.konan.irasdescriptors.constructedClass
import org.jetbrains.kotlin.backend.konan.irasdescriptors.getExternalObjCMethodInfo
import org.jetbrains.kotlin.backend.konan.irasdescriptors.isReal
import org.jetbrains.kotlin.backend.konan.irasdescriptors.*
import org.jetbrains.kotlin.descriptors.*
import org.jetbrains.kotlin.descriptors.ClassDescriptor
import org.jetbrains.kotlin.descriptors.ConstructorDescriptor
import org.jetbrains.kotlin.descriptors.FunctionDescriptor
import org.jetbrains.kotlin.descriptors.PackageFragmentDescriptor
import org.jetbrains.kotlin.incremental.components.NoLookupLocation
import org.jetbrains.kotlin.ir.declarations.IrConstructor
import org.jetbrains.kotlin.ir.declarations.IrFunction
@@ -128,9 +129,9 @@ fun FunctionDescriptor.getObjCMethodInfo(): ObjCMethodInfo? = this.getObjCMethod
fun IrFunction.isObjCBridgeBased(): Boolean {
assert(this.isReal)
return this.annotations.hasAnnotation(objCMethodFqName) ||
this.annotations.hasAnnotation(objCFactoryFqName) ||
this.annotations.hasAnnotation(objCConstructorFqName)
return this.descriptor.annotations.hasAnnotation(objCMethodFqName) ||
this.descriptor.annotations.hasAnnotation(objCFactoryFqName) ||
this.descriptor.annotations.hasAnnotation(objCConstructorFqName)
}
/**
@@ -208,10 +209,10 @@ fun ConstructorDescriptor.getObjCInitMethod(): FunctionDescriptor? {
}
}
fun IrConstructor.isObjCConstructor(): Boolean = this.annotations.hasAnnotation(objCConstructorFqName)
fun IrConstructor.isObjCConstructor(): Boolean = this.descriptor.annotations.hasAnnotation(objCConstructorFqName)
fun IrConstructor.getObjCInitMethod(): IrSimpleFunction? {
return this.annotations.findAnnotation(objCConstructorFqName)?.let {
return this.descriptor.annotations.findAnnotation(objCConstructorFqName)?.let {
val initSelector = it.getStringValue("initSelector")
this.constructedClass.declarations.asSequence()
.filterIsInstance<IrSimpleFunction>()
@@ -88,8 +88,9 @@ internal fun IrSimpleFunction.resolveFakeOverride(): IrSimpleFunction {
private val intrinsicAnnotation = FqName("konan.internal.Intrinsic")
// TODO: don't forget to remove descriptor access here.
internal val FunctionDescriptor.isIntrinsic: Boolean
get() = this.annotations.hasAnnotation(intrinsicAnnotation)
get() = this.descriptor.annotations.hasAnnotation(intrinsicAnnotation)
private val intrinsicTypes = setOf(
"kotlin.Boolean", "kotlin.Char",
@@ -30,6 +30,7 @@ import org.jetbrains.kotlin.name.Name
import org.jetbrains.kotlin.resolve.descriptorUtil.builtIns
import org.jetbrains.kotlin.resolve.scopes.MemberScope
import org.jetbrains.kotlin.resolve.scopes.MemberScopeImpl
import org.jetbrains.kotlin.storage.LockBasedStorageManager
import org.jetbrains.kotlin.storage.StorageManager
import org.jetbrains.kotlin.storage.getValue
import org.jetbrains.kotlin.utils.Printer
@@ -125,7 +126,7 @@ private class ForwardDeclarationsPackageFragmentDescriptor(
return ClassDescriptorImpl(
this@ForwardDeclarationsPackageFragmentDescriptor,
name, Modality.FINAL, classKind,
listOf(supertype), SourceElement.NO_SOURCE, false
listOf(supertype), SourceElement.NO_SOURCE, false, LockBasedStorageManager.NO_LOCKS
).apply {
this.initialize(MemberScope.Empty, emptySet(), null)
}
@@ -107,6 +107,8 @@ class IrFileImpl(entry: SourceManager.FileEntry) : IrFile {
//-------------------------------------------------------------------------//
override val annotations: MutableList<IrCall>
get() = TODO("not implemented")
override val fqName: FqName
get() = TODO("not implemented")
override val fileAnnotations: MutableList<AnnotationDescriptor>
@@ -18,11 +18,17 @@ package org.jetbrains.kotlin.backend.konan.irasdescriptors
import org.jetbrains.kotlin.backend.konan.*
import org.jetbrains.kotlin.backend.konan.llvm.llvmSymbolOrigin
import org.jetbrains.kotlin.descriptors.ClassKind
import org.jetbrains.kotlin.idea.MainFunctionDetector
import org.jetbrains.kotlin.ir.IrElement
import org.jetbrains.kotlin.ir.declarations.*
import org.jetbrains.kotlin.ir.expressions.IrCatch
import org.jetbrains.kotlin.ir.expressions.IrTypeOperatorCall
import org.jetbrains.kotlin.ir.expressions.*
import org.jetbrains.kotlin.ir.symbols.IrConstructorSymbol
import org.jetbrains.kotlin.name.FqName
import org.jetbrains.kotlin.name.Name
import org.jetbrains.kotlin.resolve.DescriptorUtils
import org.jetbrains.kotlin.resolve.constants.*
import org.jetbrains.kotlin.resolve.descriptorUtil.fqNameSafe
import org.jetbrains.kotlin.resolve.descriptorUtil.module
// This file contains some IR utilities which actually use descriptors.
@@ -58,3 +64,4 @@ internal fun IrTypeOperatorCall.getTypeOperandClass(context: Context): IrClass?
internal fun IrCatch.getCatchParameterTypeClass(context: Context): IrClass? =
context.ir.getClass(this.catchParameter.type)
@@ -28,10 +28,12 @@ import org.jetbrains.kotlin.descriptors.annotations.AnnotationDescriptor
import org.jetbrains.kotlin.ir.IrElement
import org.jetbrains.kotlin.ir.declarations.*
import org.jetbrains.kotlin.ir.declarations.impl.IrFieldImpl
import org.jetbrains.kotlin.ir.expressions.IrConst
import org.jetbrains.kotlin.ir.expressions.IrExpression
import org.jetbrains.kotlin.ir.expressions.IrFunctionAccessExpression
import org.jetbrains.kotlin.ir.expressions.getTypeArgumentOrDefault
import org.jetbrains.kotlin.ir.util.SymbolTable
import org.jetbrains.kotlin.ir.visitors.IrElementVisitor
import org.jetbrains.kotlin.ir.visitors.IrElementVisitorVoid
import org.jetbrains.kotlin.ir.visitors.acceptChildrenVoid
import org.jetbrains.kotlin.ir.visitors.acceptVoid
@@ -218,7 +220,7 @@ fun IrModuleFragment.referenceAllTypeExternalClassifiers(symbolTable: SymbolTabl
override fun visitDeclaration(declaration: IrDeclaration) {
super.visitDeclaration(declaration)
declaration.annotations.getAllAnnotations().forEach {
declaration.descriptor.annotations.getAllAnnotations().forEach {
handleClassReferences(it.annotation)
}
}
@@ -27,6 +27,7 @@ import org.jetbrains.kotlin.descriptors.PropertyAccessorDescriptor
import org.jetbrains.kotlin.descriptors.TypeParameterDescriptor
import org.jetbrains.kotlin.descriptors.annotations.AnnotationDescriptor
import org.jetbrains.kotlin.ir.declarations.*
import org.jetbrains.kotlin.ir.expressions.IrCall
import org.jetbrains.kotlin.name.FqName
import org.jetbrains.kotlin.resolve.constants.StringValue
import org.jetbrains.kotlin.resolve.descriptorUtil.fqNameSafe
@@ -48,26 +49,26 @@ import org.jetbrains.kotlin.utils.addToStdlib.ifNotEmpty
*/
internal tailrec fun DeclarationDescriptor.isExported(): Boolean {
// TODO: revise
if (this.annotations.findAnnotation(symbolNameAnnotation) != null) {
val descriptorAnnotations = this.descriptor.annotations
if (descriptorAnnotations.hasAnnotation(symbolNameAnnotation)) {
// Treat any `@SymbolName` declaration as exported.
return true
}
if (this.annotations.findAnnotation(exportForCppRuntimeAnnotation) != null) {
if (descriptorAnnotations.hasAnnotation(exportForCppRuntimeAnnotation)) {
// Treat any `@ExportForCppRuntime` declaration as exported.
return true
}
if (this.annotations.findAnnotation(cnameAnnotation) != null) {
if (descriptorAnnotations.hasAnnotation(cnameAnnotation)) {
// Treat `@CName` declaration as exported.
return true
}
if (this.annotations.hasAnnotation(exportForCompilerAnnotation)) {
if (descriptorAnnotations.hasAnnotation(exportForCompilerAnnotation)) {
return true
}
if (this.annotations.hasAnnotation(publishedApiAnnotation)){
if (descriptorAnnotations.hasAnnotation(publishedApiAnnotation)){
return true
}
if (this.annotations.hasAnnotation(inlineExposedAnnotation)){
if (descriptorAnnotations.hasAnnotation(inlineExposedAnnotation)){
return true
}
@@ -202,16 +203,14 @@ internal val FunctionDescriptor.symbolName: String
if (!this.isExported()) {
throw AssertionError(this.descriptor.toString())
}
this.annotations.findAnnotation(symbolNameAnnotation)?.let {
this.descriptor.annotations.findAnnotation(symbolNameAnnotation)?.let {
if (this.isExternal) {
return getStringValue(it)!!
} else {
// ignore; TODO: report compile error
}
}
this.annotations.findAnnotation(exportForCppRuntimeAnnotation)?.let {
this.descriptor.annotations.findAnnotation(exportForCppRuntimeAnnotation)?.let {
val name = getStringValue(it) ?: this.name.asString()
return name // no wrapping currently required
}
@@ -234,12 +233,10 @@ internal val IrField.symbolName: String
}
private fun getStringValue(annotation: AnnotationDescriptor): String? {
annotation.allValueArguments.values.ifNotEmpty {
val stringValue = this.single() as StringValue
return stringValue.value
return annotation.allValueArguments.values.ifNotEmpty {
val stringValue = single() as? StringValue
stringValue?.value
}
return null
}
// TODO: bring here dependencies of this method?
@@ -2316,7 +2316,7 @@ internal class CodeGeneratorVisitor(val context: Context, val lifetimes: Map<IrE
assert(irClass.isInterface)
assert(irClass.isExternalObjCClass())
val annotation = irClass.annotations.findAnnotation(externalObjCClassFqName)!!
val annotation = irClass.descriptor.annotations.findAnnotation(externalObjCClassFqName)!!
val protocolGetterName = annotation.getStringValue("protocolGetter")
val protocolGetter = context.llvm.externalFunction(
protocolGetterName,
@@ -101,7 +101,7 @@ internal class KotlinObjCClassInfoGenerator(override val context: Context) : Con
private fun selectClassName(irClass: IrClass): String? {
val exportObjCClassAnnotation =
irClass.annotations.findAnnotation(context.interopBuiltIns.exportObjCClass.fqNameSafe)
irClass.descriptor.annotations.findAnnotation(context.interopBuiltIns.exportObjCClass.fqNameSafe)
return if (exportObjCClassAnnotation != null) {
exportObjCClassAnnotation.getStringValueOrNull("name") ?: irClass.name.asString()
@@ -141,7 +141,7 @@ internal class KotlinObjCClassInfoGenerator(override val context: Context) : Con
.filterIsInstance<IrSimpleFunction>()
.mapNotNull {
val annotation =
it.annotations.findAnnotation(context.interopBuiltIns.objCMethodImp.fqNameSafe) ?:
it.descriptor.annotations.findAnnotation(context.interopBuiltIns.objCMethodImp.fqNameSafe) ?:
return@mapNotNull null
ObjCMethodDesc(
@@ -87,7 +87,7 @@ internal class RTTIGenerator(override val context: Context) : ContextUtils {
}
private fun exportTypeInfoIfRequired(classDesc: ClassDescriptor, typeInfoGlobal: LLVMValueRef?) {
val annot = classDesc.annotations.findAnnotation(FqName("konan.ExportTypeInfo"))
val annot = classDesc.descriptor.annotations.findAnnotation(FqName("konan.ExportTypeInfo"))
if (annot != null) {
val nameValue = annot.allValueArguments.values.single() as StringValue
// TODO: use LLVMAddAlias?
@@ -57,6 +57,7 @@ import org.jetbrains.kotlin.ir.visitors.transformChildrenVoid
import org.jetbrains.kotlin.name.FqName
import org.jetbrains.kotlin.name.Name
import org.jetbrains.kotlin.resolve.scopes.MemberScope
import org.jetbrains.kotlin.storage.LockBasedStorageManager
import org.jetbrains.kotlin.types.KotlinType
import org.jetbrains.kotlin.types.TypeUtils
@@ -208,7 +209,8 @@ internal class CallableReferenceLowering(val context: Context): FileLoweringPass
/* kind = */ ClassKind.CLASS,
/* superTypes = */ superTypes,
/* source = */ SourceElement.NO_SOURCE,
/* isExternal = */ false
/* isExternal = */ false,
/* storageManager = */ LockBasedStorageManager.NO_LOCKS
) {
override fun getVisibility() = Visibilities.PRIVATE
}
@@ -40,6 +40,7 @@ import org.jetbrains.kotlin.name.Name
import org.jetbrains.kotlin.resolve.DescriptorUtils
import org.jetbrains.kotlin.resolve.descriptorUtil.getSuperClassOrAny
import org.jetbrains.kotlin.resolve.descriptorUtil.getSuperInterfaces
import org.jetbrains.kotlin.storage.LockBasedStorageManager
import org.jetbrains.kotlin.types.KotlinType
import org.jetbrains.kotlin.types.TypeSubstitutor
import org.jetbrains.kotlin.types.TypeUtils
@@ -221,7 +222,8 @@ internal class DeepCopyIrTreeWithDescriptors(val targetDescriptor: FunctionDescr
/* kind = */ oldDescriptor.kind,
/* supertypes = */ listOf(newSuperClass.defaultType) + newInterfaces.map { it.defaultType },
/* source = */ oldDescriptor.source,
/* isExternal = */ oldDescriptor.isExternal
/* isExternal = */ oldDescriptor.isExternal,
/* storageManager = */ LockBasedStorageManager.NO_LOCKS
) {
override fun getVisibility() = visibility
}
@@ -46,6 +46,7 @@ import org.jetbrains.kotlin.ir.visitors.transformChildrenVoid
import org.jetbrains.kotlin.name.Name
import org.jetbrains.kotlin.resolve.descriptorUtil.module
import org.jetbrains.kotlin.resolve.scopes.MemberScope
import org.jetbrains.kotlin.storage.LockBasedStorageManager
import org.jetbrains.kotlin.types.TypeProjectionImpl
import org.jetbrains.kotlin.types.TypeSubstitutor
import org.jetbrains.kotlin.types.Variance
@@ -252,7 +253,7 @@ internal class EnumClassLowering(val context: Context) : ClassLoweringPass {
val endOffset = irClass.endOffset
val descriptor = irClass.descriptor
val defaultClassDescriptor = ClassDescriptorImpl(descriptor, "DEFAULT".synthesizedName, Modality.FINAL,
ClassKind.CLASS, listOf(descriptor.defaultType), SourceElement.NO_SOURCE, false)
ClassKind.CLASS, listOf(descriptor.defaultType), SourceElement.NO_SOURCE, false, LockBasedStorageManager.NO_LOCKS)
val defaultClass = IrClassImpl(startOffset, endOffset, IrDeclarationOrigin.DEFINED, defaultClassDescriptor)
@@ -19,10 +19,7 @@ package org.jetbrains.kotlin.backend.konan.lower
import org.jetbrains.kotlin.backend.common.ClassLoweringPass
import org.jetbrains.kotlin.backend.common.CommonBackendContext
import org.jetbrains.kotlin.backend.konan.descriptors.synthesizedName
import org.jetbrains.kotlin.descriptors.CallableMemberDescriptor
import org.jetbrains.kotlin.descriptors.Modality
import org.jetbrains.kotlin.descriptors.SourceElement
import org.jetbrains.kotlin.descriptors.Visibilities
import org.jetbrains.kotlin.descriptors.*
import org.jetbrains.kotlin.descriptors.annotations.Annotations
import org.jetbrains.kotlin.descriptors.impl.SimpleFunctionDescriptorImpl
import org.jetbrains.kotlin.ir.IrStatement
@@ -138,6 +135,8 @@ internal class InitializersLowering(val context: CommonBackendContext) : ClassLo
}
private fun lowerConstructors(initializerMethodSymbol: IrSimpleFunctionSymbol?) {
if (irClass.kind == ClassKind.ANNOTATION_CLASS)
return
irClass.transformChildrenVoid(object : IrElementTransformerVoid() {
override fun visitClass(declaration: IrClass): IrStatement {
@@ -56,6 +56,7 @@ import org.jetbrains.kotlin.ir.visitors.*
import org.jetbrains.kotlin.name.FqName
import org.jetbrains.kotlin.name.Name
import org.jetbrains.kotlin.resolve.scopes.MemberScope
import org.jetbrains.kotlin.storage.LockBasedStorageManager
import org.jetbrains.kotlin.types.KotlinType
import org.jetbrains.kotlin.types.typeUtil.isUnit
import org.jetbrains.kotlin.types.typeUtil.makeNotNullable
@@ -331,7 +332,8 @@ internal class SuspendFunctionsLowering(val context: Context): DeclarationContai
/* kind = */ ClassKind.CLASS,
/* superTypes = */ superTypes,
/* source = */ SourceElement.NO_SOURCE,
/* isExternal = */ false
/* isExternal = */ false,
/* storageManager = */ LockBasedStorageManager.NO_LOCKS
)
coroutineClass = IrClassImpl(
startOffset = irFunction.startOffset,
@@ -53,6 +53,7 @@ import org.jetbrains.kotlin.load.kotlin.PackagePartClassUtils
import org.jetbrains.kotlin.name.FqName
import org.jetbrains.kotlin.name.Name
import org.jetbrains.kotlin.resolve.descriptorUtil.fqNameSafe
import org.jetbrains.kotlin.storage.LockBasedStorageManager
import org.jetbrains.kotlin.types.KotlinType
internal class TestProcessor (val context: KonanBackendContext) {
@@ -531,7 +532,8 @@ internal class TestProcessor (val context: KonanBackendContext) {
/* kind = */ ClassKind.CLASS,
/* superTypes = */ listOf(superType),
/* source = */ SourceElement.NO_SOURCE,
/* isExternal = */ false
/* isExternal = */ false,
/* storageManager = */ LockBasedStorageManager.NO_LOCKS
)
)
}
@@ -30,12 +30,15 @@ import org.jetbrains.kotlin.backend.konan.ir.IrSuspensionPoint
import org.jetbrains.kotlin.backend.konan.irasdescriptors.*
import org.jetbrains.kotlin.backend.konan.llvm.functionName
import org.jetbrains.kotlin.backend.konan.llvm.localHash
import org.jetbrains.kotlin.descriptors.ClassKind
import org.jetbrains.kotlin.descriptors.TypeParameterDescriptor
import org.jetbrains.kotlin.ir.IrElement
import org.jetbrains.kotlin.ir.UNDEFINED_OFFSET
import org.jetbrains.kotlin.ir.backend.js.utils.constructedClass
import org.jetbrains.kotlin.ir.declarations.*
import org.jetbrains.kotlin.ir.expressions.*
import org.jetbrains.kotlin.ir.expressions.impl.*
import org.jetbrains.kotlin.ir.symbols.IrConstructorSymbol
import org.jetbrains.kotlin.ir.util.getArguments
import org.jetbrains.kotlin.ir.util.simpleFunctions
import org.jetbrains.kotlin.ir.visitors.IrElementVisitorVoid
@@ -231,6 +234,18 @@ internal class ModuleDFGBuilder(val context: Context, val irModule: IrModuleFrag
element.acceptChildrenVoid(this)
}
override fun visitConstructor(declaration: IrConstructor) {
val body = declaration.body
assert (body != null || declaration.symbol.constructedClass.kind == ClassKind.ANNOTATION_CLASS) {
"Non-annotation class constructor has empty body"
}
DEBUG_OUTPUT(0) {
println("Analysing function ${declaration.descriptor}")
println("IR: ${ir2stringWhole(declaration)}")
}
analyze(declaration, body)
}
override fun visitFunction(declaration: IrFunction) {
declaration.body?.let {
DEBUG_OUTPUT(0) {
@@ -251,10 +266,10 @@ internal class ModuleDFGBuilder(val context: Context, val irModule: IrModuleFrag
}
}
private fun analyze(descriptor: DeclarationDescriptor, body: IrElement) {
private fun analyze(descriptor: DeclarationDescriptor, body: IrElement?) {
// Find all interesting expressions, variables and functions.
val visitor = ElementFinderVisitor()
body.acceptVoid(visitor)
body?.acceptVoid(visitor)
DEBUG_OUTPUT(0) {
println("FIRST PHASE")
@@ -522,8 +522,8 @@ internal object DataFlowIR {
val name = if (it.isExported()) it.symbolName else it.internalName
val numberOfParameters = it.allParameters.size + if (it.isSuspend) 1 else 0
if (it.module != irModule.descriptor || it.isExternal || (it.origin == IrDeclarationOrigin.IR_BUILTINS_STUB)) {
val escapesAnnotation = it.annotations.findAnnotation(FQ_NAME_ESCAPES)
val pointsToAnnotation = it.annotations.findAnnotation(FQ_NAME_POINTS_TO)
val escapesAnnotation = it.descriptor.annotations.findAnnotation(FQ_NAME_ESCAPES)
val pointsToAnnotation = it.descriptor.annotations.findAnnotation(FQ_NAME_POINTS_TO)
@Suppress("UNCHECKED_CAST")
val escapesBitMask = (escapesAnnotation?.allValueArguments?.get(escapesWhoDescriptor.name) as? ConstantValue<Int>)?.value
@Suppress("UNCHECKED_CAST")
@@ -22,6 +22,7 @@ import org.jetbrains.kotlin.descriptors.*
import org.jetbrains.kotlin.name.*
import org.jetbrains.kotlin.types.*
import org.jetbrains.kotlin.resolve.calls.inference.*
import org.jetbrains.kotlin.storage.LockBasedStorageManager
private val konanInternalPackageName = FqName("konan.internal")
private val fakeCapturedTypeClassName = Name.identifier("FAKE_CAPTURED_TYPE_CLASS")
@@ -36,7 +37,8 @@ internal fun createFakeClass(packageName: FqName, className: Name)
/* isInner = */ false,
/* isExternal = */ false,
className,
SourceElement.NO_SOURCE
SourceElement.NO_SOURCE,
LockBasedStorageManager.NO_LOCKS
)
// We do the trick similar to FAKE_CONTINUATION_CLASS_DESCRIPTOR.
@@ -19,6 +19,7 @@ package org.jetbrains.kotlin.serialization
import org.jetbrains.kotlin.backend.common.onlyIf
import org.jetbrains.kotlin.backend.konan.descriptors.needsSerializedIr
import org.jetbrains.kotlin.backend.konan.serialization.IrAwareExtension
import org.jetbrains.kotlin.backend.konan.serialization.KonanStringTable
import org.jetbrains.kotlin.builtins.KotlinBuiltIns
import org.jetbrains.kotlin.builtins.isSuspendFunctionType
import org.jetbrains.kotlin.builtins.transformSuspendFunctionToRuntimeFunctionType
@@ -27,6 +28,7 @@ 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.deserialization.VersionRequirement
import org.jetbrains.kotlin.metadata.serialization.Interner
import org.jetbrains.kotlin.metadata.serialization.MutableTypeTable
import org.jetbrains.kotlin.metadata.serialization.MutableVersionRequirementTable
@@ -44,7 +46,6 @@ 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.metadata.serialization.*
@@ -540,7 +541,7 @@ class KonanDescriptorSerializer private constructor(
}
if (type.isSuspendFunctionType) {
val functionType = type(transformSuspendFunctionToRuntimeFunctionType(type))
val functionType = type(transformSuspendFunctionToRuntimeFunctionType(type, extension.releaseCoroutines()))
functionType.flags = Flags.getTypeFlags(true)
return functionType
}
@@ -773,7 +774,7 @@ class KonanDescriptorSerializer private constructor(
@JvmStatic
fun serialize(message: MessageLite, stringTable: StringTable): ByteArray {
return ByteArrayOutputStream().apply {
stringTable.serializeTo(this)
(stringTable as KonanStringTable).serializeTo(this)
message.writeTo(this)
}.toByteArray()
}
@@ -24,6 +24,7 @@ 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
import java.io.OutputStream
class KonanStringTable : StringTableImpl() {
@@ -54,4 +55,10 @@ class KonanStringTable : StringTableImpl() {
super.getLocalClassIdReplacement(descriptor)
}
}
fun serializeTo(output: OutputStream) {
val (strings, qualifiedNames) = buildProto()
strings.writeDelimitedTo(output)
qualifiedNames.writeDelimitedTo(output)
}
}
@@ -28,9 +28,9 @@ 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.serialization.deserialization.*
import org.jetbrains.kotlin.serialization.deserialization.descriptors.DeserializedClassDescriptor
import org.jetbrains.kotlin.serialization.deserialization.descriptors.VersionRequirementTable
// This class knows how to construct contexts for
// MemberDeserializer to deserialize descriptors declared in IR.
+3 -3
View File
@@ -15,13 +15,13 @@
#
# A version of the Kotlin "toolchain" (compiler, runtime, stdlib etc) used by the build script.
buildKotlinVersion=1.2.40
buildKotlinVersion=1.2.41
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.50-dev-515,tag:kotlin-native,pinned:true/artifacts/content/maven
kotlinVersion=1.2.50-dev-515
kotlinCompilerRepo=https://teamcity.jetbrains.com/guestAuth/app/rest/builds/buildType:(id:Kotlin_dev_CompilerAllPlugins),number:1.2.50-dev-1070,tag:kotlin-native,pinned:true/artifacts/content/maven
kotlinVersion=1.2.50-dev-1070
konanVersion=0.7
org.gradle.jvmargs='-Dfile.encoding=UTF-8'