Minor fixes.
This commit is contained in:
@@ -29,5 +29,5 @@ class JvmBackendContext(
|
|||||||
) {
|
) {
|
||||||
val builtIns = state.module.builtIns
|
val builtIns = state.module.builtIns
|
||||||
val specialDescriptorsFactory = SpecialDescriptorsFactory(psiSourceManager, builtIns)
|
val specialDescriptorsFactory = SpecialDescriptorsFactory(psiSourceManager, builtIns)
|
||||||
val sharedVariablesManager = JvmSharedVariablesManager(irBuiltIns)
|
val sharedVariablesManager = JvmSharedVariablesManager(builtIns)
|
||||||
}
|
}
|
||||||
|
|||||||
+5
-11
@@ -26,7 +26,6 @@ import org.jetbrains.kotlin.descriptors.impl.PropertyDescriptorImpl
|
|||||||
import org.jetbrains.kotlin.ir.IrStatement
|
import org.jetbrains.kotlin.ir.IrStatement
|
||||||
import org.jetbrains.kotlin.ir.declarations.IrVariable
|
import org.jetbrains.kotlin.ir.declarations.IrVariable
|
||||||
import org.jetbrains.kotlin.ir.declarations.impl.IrVariableImpl
|
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.IrExpression
|
||||||
import org.jetbrains.kotlin.ir.expressions.IrGetValue
|
import org.jetbrains.kotlin.ir.expressions.IrGetValue
|
||||||
import org.jetbrains.kotlin.ir.expressions.IrSetVariable
|
import org.jetbrains.kotlin.ir.expressions.IrSetVariable
|
||||||
@@ -43,12 +42,9 @@ interface SharedVariablesManager {
|
|||||||
fun setSharedValue(sharedVariableDescriptor: VariableDescriptor, originalSet: IrSetVariable): IrExpression
|
fun setSharedValue(sharedVariableDescriptor: VariableDescriptor, originalSet: IrSetVariable): IrExpression
|
||||||
}
|
}
|
||||||
|
|
||||||
class JvmSharedVariablesManager(val irBuiltIns: IrBuiltIns) : SharedVariablesManager {
|
class JvmSharedVariablesManager(val builtIns: KotlinBuiltIns) : SharedVariablesManager {
|
||||||
private val builtIns = irBuiltIns.builtIns
|
|
||||||
private val fromAny = listOf(builtIns.anyType)
|
|
||||||
|
|
||||||
private val kotlinJvmInternalPackage = KnownPackageFragmentDescriptor(builtIns.builtInsModule, FqName("kotlin.jvm.internal"))
|
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) {
|
private class PrimitiveRefDescriptorsProvider(type: KotlinType, refClass: ClassDescriptor) {
|
||||||
val refType: KotlinType = refClass.defaultType
|
val refType: KotlinType = refClass.defaultType
|
||||||
@@ -59,7 +55,6 @@ class JvmSharedVariablesManager(val irBuiltIns: IrBuiltIns) : SharedVariablesMan
|
|||||||
returnType = refType
|
returnType = refType
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
val elementField: PropertyDescriptor =
|
val elementField: PropertyDescriptor =
|
||||||
PropertyDescriptorImpl.create(
|
PropertyDescriptorImpl.create(
|
||||||
refClass, Annotations.EMPTY, Modality.FINAL, Visibilities.PUBLIC, true,
|
refClass, Annotations.EMPTY, Modality.FINAL, Visibilities.PUBLIC, true,
|
||||||
@@ -68,12 +63,12 @@ class JvmSharedVariablesManager(val irBuiltIns: IrBuiltIns) : SharedVariablesMan
|
|||||||
).initialize(type, dispatchReceiverParameter = refClass.thisAsReceiverParameter)
|
).initialize(type, dispatchReceiverParameter = refClass.thisAsReceiverParameter)
|
||||||
}
|
}
|
||||||
|
|
||||||
private val primitiveRefDescriptorProviders =
|
private val primitiveRefDescriptorProviders: Map<PrimitiveType, PrimitiveRefDescriptorsProvider> =
|
||||||
PrimitiveType.values().associate {
|
PrimitiveType.values().associate {
|
||||||
val type = builtIns.getPrimitiveKotlinType(it)
|
val type = builtIns.getPrimitiveKotlinType(it)
|
||||||
|
|
||||||
val refClassName = Name.identifier(it.typeName.asString() + "Ref")
|
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)
|
it to PrimitiveRefDescriptorsProvider(type, refClass)
|
||||||
}
|
}
|
||||||
@@ -81,7 +76,7 @@ class JvmSharedVariablesManager(val irBuiltIns: IrBuiltIns) : SharedVariablesMan
|
|||||||
private inner class ObjectRefDescriptorsProvider {
|
private inner class ObjectRefDescriptorsProvider {
|
||||||
val genericRefClass: ClassDescriptor =
|
val genericRefClass: ClassDescriptor =
|
||||||
KnownClassDescriptor.createClassWithTypeParameters(
|
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 =
|
val genericRefConstructor: ClassConstructorDescriptor =
|
||||||
@@ -92,7 +87,6 @@ class JvmSharedVariablesManager(val irBuiltIns: IrBuiltIns) : SharedVariablesMan
|
|||||||
returnType = KotlinTypeFactory.simpleNotNullType(Annotations.EMPTY, genericRefClass, listOf(TypeProjectionImpl(Variance.INVARIANT, typeParameterType)))
|
returnType = KotlinTypeFactory.simpleNotNullType(Annotations.EMPTY, genericRefClass, listOf(TypeProjectionImpl(Variance.INVARIANT, typeParameterType)))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
val constructorTypeParameter: TypeParameterDescriptor =
|
val constructorTypeParameter: TypeParameterDescriptor =
|
||||||
genericRefConstructor.typeParameters[0]
|
genericRefConstructor.typeParameters[0]
|
||||||
|
|
||||||
|
|||||||
@@ -65,7 +65,10 @@ class Concat : IntrinsicMethod() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
override fun toCallable(expression: IrMemberAccessExpression, signature: JvmMethodSignature, context: JvmBackendContext): IrIntrinsicFunction {
|
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) {
|
override fun genInvokeInstruction(v: InstructionAdapter) {
|
||||||
AsmUtil.genInvokeAppendMethod(v, argsTypes[1])
|
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) {
|
override fun genArg(expression: IrExpression, codegen: org.jetbrains.kotlin.backend.jvm.codegen.ExpressionCodegen, index: Int, data: BlockInfo) {
|
||||||
super.genArg(expression, codegen, index, data)
|
super.genArg(expression, codegen, index, data)
|
||||||
if (index == 0) {
|
if (index == 0) {
|
||||||
codegen.mv.checkcast(AsmTypes.JAVA_STRING_TYPE)
|
|
||||||
codegen.mv.invokespecial("java/lang/StringBuilder", "<init>", "(Ljava/lang/String;)V", false)
|
codegen.mv.invokespecial("java/lang/StringBuilder", "<init>", "(Ljava/lang/String;)V", false)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user