Get rid of impl classes

This commit is contained in:
Michael Bogdanov
2016-09-23 15:58:04 +03:00
committed by Dmitry Petrov
parent bdecffa1e1
commit 31d971a302
2 changed files with 5 additions and 6 deletions
@@ -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