Support javaClass for Void type
This commit is contained in:
+11
-11
@@ -21,13 +21,9 @@ import org.jetbrains.kotlin.backend.jvm.codegen.BlockInfo
|
|||||||
import org.jetbrains.kotlin.codegen.AsmUtil
|
import org.jetbrains.kotlin.codegen.AsmUtil
|
||||||
import org.jetbrains.kotlin.codegen.AsmUtil.boxType
|
import org.jetbrains.kotlin.codegen.AsmUtil.boxType
|
||||||
import org.jetbrains.kotlin.codegen.AsmUtil.isPrimitive
|
import org.jetbrains.kotlin.codegen.AsmUtil.isPrimitive
|
||||||
import org.jetbrains.kotlin.codegen.Callable
|
|
||||||
import org.jetbrains.kotlin.codegen.ExpressionCodegen
|
|
||||||
import org.jetbrains.kotlin.codegen.StackValue
|
import org.jetbrains.kotlin.codegen.StackValue
|
||||||
import org.jetbrains.kotlin.descriptors.FunctionDescriptor
|
|
||||||
import org.jetbrains.kotlin.ir.expressions.IrMemberAccessExpression
|
import org.jetbrains.kotlin.ir.expressions.IrMemberAccessExpression
|
||||||
import org.jetbrains.kotlin.resolve.calls.model.ResolvedCall
|
import org.jetbrains.kotlin.resolve.jvm.AsmTypes
|
||||||
import org.jetbrains.kotlin.resolve.jvm.AsmTypes.getType
|
|
||||||
import org.jetbrains.kotlin.resolve.jvm.jvmSignature.JvmMethodSignature
|
import org.jetbrains.kotlin.resolve.jvm.jvmSignature.JvmMethodSignature
|
||||||
import org.jetbrains.org.objectweb.asm.Type
|
import org.jetbrains.org.objectweb.asm.Type
|
||||||
import org.jetbrains.org.objectweb.asm.commons.InstructionAdapter
|
import org.jetbrains.org.objectweb.asm.commons.InstructionAdapter
|
||||||
@@ -40,12 +36,16 @@ object JavaClassProperty : IntrinsicMethod() {
|
|||||||
override fun invoke(v: InstructionAdapter, codegen: org.jetbrains.kotlin.backend.jvm.codegen.ExpressionCodegen, data: BlockInfo): StackValue {
|
override fun invoke(v: InstructionAdapter, codegen: org.jetbrains.kotlin.backend.jvm.codegen.ExpressionCodegen, data: BlockInfo): StackValue {
|
||||||
val value = codegen.gen(expression.extensionReceiver!!, data)
|
val value = codegen.gen(expression.extensionReceiver!!, data)
|
||||||
val type = value.type
|
val type = value.type
|
||||||
if (isPrimitive(type)) {
|
when {
|
||||||
AsmUtil.pop(v, type)
|
type == Type.VOID_TYPE -> {
|
||||||
v.getstatic(boxType(type).internalName, "TYPE", "Ljava/lang/Class;")
|
StackValue.unit().put(AsmTypes.UNIT_TYPE, v)
|
||||||
}
|
v.invokevirtual("java/lang/Object", "getClass", "()Ljava/lang/Class;", false)
|
||||||
else {
|
}
|
||||||
v.invokevirtual("java/lang/Object", "getClass", "()Ljava/lang/Class;", false)
|
isPrimitive(type) -> {
|
||||||
|
AsmUtil.pop(v, type)
|
||||||
|
v.getstatic(boxType(type).internalName, "TYPE", "Ljava/lang/Class;")
|
||||||
|
}
|
||||||
|
else -> v.invokevirtual("java/lang/Object", "getClass", "()Ljava/lang/Class;", false)
|
||||||
}
|
}
|
||||||
|
|
||||||
return with(codegen) {
|
return with(codegen) {
|
||||||
|
|||||||
Reference in New Issue
Block a user