Get rid of impl classes
This commit is contained in:
committed by
Dmitry Petrov
parent
bdecffa1e1
commit
31d971a302
+2
-1
@@ -27,6 +27,7 @@ import org.jetbrains.kotlin.descriptors.FunctionDescriptor
|
||||
import org.jetbrains.kotlin.ir.expressions.IrCall
|
||||
import org.jetbrains.kotlin.ir.expressions.IrMemberAccessExpression
|
||||
import org.jetbrains.kotlin.ir.expressions.IrStatementOrigin
|
||||
import org.jetbrains.kotlin.ir.expressions.impl.IrPrimitiveCallBase
|
||||
import org.jetbrains.kotlin.ir.expressions.impl.IrUnaryPrimitiveImpl
|
||||
import org.jetbrains.kotlin.lexer.KtTokens
|
||||
import org.jetbrains.kotlin.resolve.jvm.jvmSignature.JvmMethodSignature
|
||||
@@ -59,7 +60,7 @@ class CompareTo : IntrinsicMethod() {
|
||||
|
||||
class IrCompareTo : IntrinsicMethod() {
|
||||
override fun toCallable(expression: IrMemberAccessExpression, signature: JvmMethodSignature, context: JvmBackendContext): IrIntrinsicFunction {
|
||||
assert(expression is IrUnaryPrimitiveImpl)
|
||||
assert(expression is IrPrimitiveCallBase)
|
||||
val compareCall = expression.getValueArgument(0) as IrCall
|
||||
val args = compareCall.receiverAndArgs()
|
||||
val argTypes = args.asmTypes(context)
|
||||
|
||||
@@ -22,7 +22,6 @@ import org.jetbrains.kotlin.codegen.AsmUtil.*
|
||||
import org.jetbrains.kotlin.codegen.StackValue
|
||||
import org.jetbrains.kotlin.ir.expressions.IrMemberAccessExpression
|
||||
import org.jetbrains.kotlin.ir.expressions.IrStatementOrigin
|
||||
import org.jetbrains.kotlin.ir.expressions.impl.IrBinaryPrimitiveImpl
|
||||
import org.jetbrains.kotlin.resolve.jvm.AsmTypes.OBJECT_TYPE
|
||||
import org.jetbrains.kotlin.resolve.jvm.jvmSignature.JvmMethodSignature
|
||||
import org.jetbrains.org.objectweb.asm.Type
|
||||
@@ -30,9 +29,8 @@ import org.jetbrains.org.objectweb.asm.commons.InstructionAdapter
|
||||
|
||||
class Equals(val operator: IElementType) : IntrinsicMethod() {
|
||||
override fun toCallable(expression: IrMemberAccessExpression, signature: JvmMethodSignature, context: JvmBackendContext): IrIntrinsicFunction {
|
||||
val binary = expression as IrBinaryPrimitiveImpl
|
||||
var leftType = context.state.typeMapper.mapType(binary.argument0.type)
|
||||
var rightType = context.state.typeMapper.mapType(binary.argument1.type)
|
||||
var leftType = context.state.typeMapper.mapType(expression.getValueArgument(0)!!.type)
|
||||
var rightType = context.state.typeMapper.mapType(expression.getValueArgument(1)!!.type)
|
||||
|
||||
if (isPrimitive(leftType) != isPrimitive(rightType)) {
|
||||
leftType = boxType(leftType)
|
||||
@@ -42,7 +40,7 @@ class Equals(val operator: IElementType) : IntrinsicMethod() {
|
||||
|
||||
return object: IrIntrinsicFunction(expression, signature, context, listOf(leftType, rightType)) {
|
||||
override fun genInvokeInstruction(v: InstructionAdapter) {
|
||||
val opToken = binary.origin
|
||||
val opToken = expression.origin
|
||||
|
||||
val value = if (opToken === IrStatementOrigin.EQEQEQ || opToken === IrStatementOrigin.EXCLEQEQ) {
|
||||
// TODO: always casting to the type of the left operand in case of primitives looks wrong
|
||||
|
||||
Reference in New Issue
Block a user