Minor fixes.

This commit is contained in:
Dmitry Petrov
2016-10-07 15:47:45 +03:00
parent a96aac090e
commit 9b1e87ec84
3 changed files with 10 additions and 14 deletions
@@ -29,5 +29,5 @@ class JvmBackendContext(
) {
val builtIns = state.module.builtIns
val specialDescriptorsFactory = SpecialDescriptorsFactory(psiSourceManager, builtIns)
val sharedVariablesManager = JvmSharedVariablesManager(irBuiltIns)
val sharedVariablesManager = JvmSharedVariablesManager(builtIns)
}
@@ -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, PrimitiveRefDescriptorsProvider> =
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]
@@ -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", "<init>", "(Ljava/lang/String;)V", false)
}
}