From 9b1e87ec84660dac8388dcf68b9739d55f92517f Mon Sep 17 00:00:00 2001 From: Dmitry Petrov Date: Fri, 7 Oct 2016 15:47:45 +0300 Subject: [PATCH] Minor fixes. --- .../kotlin/backend/jvm/JvmBackendContext.kt | 2 +- .../jvm/descriptors/SharedVariablesManager.kt | 16 +++++----------- .../kotlin/backend/jvm/intrinsics/Concat.kt | 6 ++++-- 3 files changed, 10 insertions(+), 14 deletions(-) diff --git a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/JvmBackendContext.kt b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/JvmBackendContext.kt index e4d0de5dafc..d87a1df5834 100644 --- a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/JvmBackendContext.kt +++ b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/JvmBackendContext.kt @@ -29,5 +29,5 @@ class JvmBackendContext( ) { val builtIns = state.module.builtIns val specialDescriptorsFactory = SpecialDescriptorsFactory(psiSourceManager, builtIns) - val sharedVariablesManager = JvmSharedVariablesManager(irBuiltIns) + val sharedVariablesManager = JvmSharedVariablesManager(builtIns) } diff --git a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/descriptors/SharedVariablesManager.kt b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/descriptors/SharedVariablesManager.kt index 2ed199dfad0..8c31b0d00ac 100644 --- a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/descriptors/SharedVariablesManager.kt +++ b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/descriptors/SharedVariablesManager.kt @@ -26,7 +26,6 @@ import org.jetbrains.kotlin.descriptors.impl.PropertyDescriptorImpl import org.jetbrains.kotlin.ir.IrStatement import org.jetbrains.kotlin.ir.declarations.IrVariable import org.jetbrains.kotlin.ir.declarations.impl.IrVariableImpl -import org.jetbrains.kotlin.ir.descriptors.IrBuiltIns import org.jetbrains.kotlin.ir.expressions.IrExpression import org.jetbrains.kotlin.ir.expressions.IrGetValue import org.jetbrains.kotlin.ir.expressions.IrSetVariable @@ -43,12 +42,9 @@ interface SharedVariablesManager { fun setSharedValue(sharedVariableDescriptor: VariableDescriptor, originalSet: IrSetVariable): IrExpression } -class JvmSharedVariablesManager(val irBuiltIns: IrBuiltIns) : SharedVariablesManager { - private val builtIns = irBuiltIns.builtIns - private val fromAny = listOf(builtIns.anyType) - +class JvmSharedVariablesManager(val builtIns: KotlinBuiltIns) : SharedVariablesManager { private val kotlinJvmInternalPackage = KnownPackageFragmentDescriptor(builtIns.builtInsModule, FqName("kotlin.jvm.internal")) - private val refNamespaceClass = KnownClassDescriptor.createClass(Name.identifier("Ref"), kotlinJvmInternalPackage, fromAny) + private val refNamespaceClass = KnownClassDescriptor.createClass(Name.identifier("Ref"), kotlinJvmInternalPackage, listOf(builtIns.anyType)) private class PrimitiveRefDescriptorsProvider(type: KotlinType, refClass: ClassDescriptor) { val refType: KotlinType = refClass.defaultType @@ -59,7 +55,6 @@ class JvmSharedVariablesManager(val irBuiltIns: IrBuiltIns) : SharedVariablesMan returnType = refType } - val elementField: PropertyDescriptor = PropertyDescriptorImpl.create( refClass, Annotations.EMPTY, Modality.FINAL, Visibilities.PUBLIC, true, @@ -68,12 +63,12 @@ class JvmSharedVariablesManager(val irBuiltIns: IrBuiltIns) : SharedVariablesMan ).initialize(type, dispatchReceiverParameter = refClass.thisAsReceiverParameter) } - private val primitiveRefDescriptorProviders = + private val primitiveRefDescriptorProviders: Map = PrimitiveType.values().associate { val type = builtIns.getPrimitiveKotlinType(it) val refClassName = Name.identifier(it.typeName.asString() + "Ref") - val refClass = KnownClassDescriptor.createClass(refClassName, refNamespaceClass, fromAny) + val refClass = KnownClassDescriptor.createClass(refClassName, refNamespaceClass, listOf(builtIns.anyType)) it to PrimitiveRefDescriptorsProvider(type, refClass) } @@ -81,7 +76,7 @@ class JvmSharedVariablesManager(val irBuiltIns: IrBuiltIns) : SharedVariablesMan private inner class ObjectRefDescriptorsProvider { val genericRefClass: ClassDescriptor = KnownClassDescriptor.createClassWithTypeParameters( - Name.identifier("ObjectRef"), refNamespaceClass, fromAny, listOf(Name.identifier("T")) + Name.identifier("ObjectRef"), refNamespaceClass, listOf(builtIns.anyType), listOf(Name.identifier("T")) ) val genericRefConstructor: ClassConstructorDescriptor = @@ -92,7 +87,6 @@ class JvmSharedVariablesManager(val irBuiltIns: IrBuiltIns) : SharedVariablesMan returnType = KotlinTypeFactory.simpleNotNullType(Annotations.EMPTY, genericRefClass, listOf(TypeProjectionImpl(Variance.INVARIANT, typeParameterType))) } - val constructorTypeParameter: TypeParameterDescriptor = genericRefConstructor.typeParameters[0] diff --git a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/intrinsics/Concat.kt b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/intrinsics/Concat.kt index a09b80ce24d..ec973056254 100644 --- a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/intrinsics/Concat.kt +++ b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/intrinsics/Concat.kt @@ -65,7 +65,10 @@ class Concat : IntrinsicMethod() { } override fun toCallable(expression: IrMemberAccessExpression, signature: JvmMethodSignature, context: JvmBackendContext): IrIntrinsicFunction { - return object : IrIntrinsicFunction(expression, signature, context, expression.receiverAndArgs().asmTypes(context)) { + val argsTypes = expression.receiverAndArgs().asmTypes(context).toMutableList() + argsTypes[0] = AsmTypes.JAVA_STRING_TYPE + + return object : IrIntrinsicFunction(expression, signature, context, argsTypes) { override fun genInvokeInstruction(v: InstructionAdapter) { AsmUtil.genInvokeAppendMethod(v, argsTypes[1]) @@ -83,7 +86,6 @@ class Concat : IntrinsicMethod() { override fun genArg(expression: IrExpression, codegen: org.jetbrains.kotlin.backend.jvm.codegen.ExpressionCodegen, index: Int, data: BlockInfo) { super.genArg(expression, codegen, index, data) if (index == 0) { - codegen.mv.checkcast(AsmTypes.JAVA_STRING_TYPE) codegen.mv.invokespecial("java/lang/StringBuilder", "", "(Ljava/lang/String;)V", false) } }