[kotlin compiler][update] 1.2.50-dev-1070
This commit is contained in:
+4
@@ -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")
|
||||
}
|
||||
|
||||
+2
-1
@@ -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)
|
||||
|
||||
+2
-1
@@ -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)
|
||||
}
|
||||
|
||||
+10
-9
@@ -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>()
|
||||
|
||||
+2
-1
@@ -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",
|
||||
|
||||
+2
-1
@@ -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)
|
||||
}
|
||||
|
||||
+2
@@ -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>
|
||||
|
||||
+9
-2
@@ -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)
|
||||
|
||||
|
||||
+3
-1
@@ -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)
|
||||
}
|
||||
}
|
||||
|
||||
+13
-16
@@ -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?
|
||||
|
||||
+1
-1
@@ -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,
|
||||
|
||||
+2
-2
@@ -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(
|
||||
|
||||
+1
-1
@@ -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?
|
||||
|
||||
+3
-1
@@ -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
|
||||
}
|
||||
|
||||
+3
-1
@@ -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
|
||||
}
|
||||
|
||||
+2
-1
@@ -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)
|
||||
|
||||
|
||||
|
||||
+3
-4
@@ -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 {
|
||||
|
||||
+3
-1
@@ -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,
|
||||
|
||||
+3
-1
@@ -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
|
||||
)
|
||||
)
|
||||
}
|
||||
|
||||
+17
-2
@@ -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")
|
||||
|
||||
+2
-2
@@ -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")
|
||||
|
||||
+3
-1
@@ -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.
|
||||
|
||||
+4
-3
@@ -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()
|
||||
}
|
||||
|
||||
+7
@@ -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)
|
||||
}
|
||||
}
|
||||
|
||||
+1
-1
@@ -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
@@ -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'
|
||||
|
||||
|
||||
Reference in New Issue
Block a user