From 8ec0cd18b703e00a16ff9802b4c3ec4b35f78359 Mon Sep 17 00:00:00 2001 From: Michael Bogdanov Date: Thu, 2 Apr 2015 19:46:51 +0300 Subject: [PATCH] CompareTo fix --- .../jetbrains/kotlin/codegen/ExpressionCodegen.java | 12 ++++++------ .../jetbrains/kotlin/codegen/intrinsics/CompareTo.kt | 2 +- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/ExpressionCodegen.java b/compiler/backend/src/org/jetbrains/kotlin/codegen/ExpressionCodegen.java index b95b7ea554e..e14bbdb051e 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/ExpressionCodegen.java +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/ExpressionCodegen.java @@ -2363,7 +2363,8 @@ public class ExpressionCodegen extends JetVisitor implem //justCoerce receiver.put(receiver.type, v); callableMethod.beforeParameterGeneration(v, StackValue.onStack(receiver.type)); - } else { + } + else { callableMethod.beforeParameterGeneration(v, null); receiver.put(receiver.type, v); } @@ -3259,18 +3260,17 @@ public class ExpressionCodegen extends JetVisitor implem private StackValue generateComparison(JetBinaryExpression expression, StackValue receiver) { ResolvedCall resolvedCall = getResolvedCallWithAssert(expression, bindingContext); - FunctionDescriptor descriptor = (FunctionDescriptor) resolvedCall.getResultingDescriptor(); JetExpression left = expression.getLeft(); JetExpression right = expression.getRight(); - Callable callable = resolveToCallable(descriptor, false, resolvedCall); Type type; StackValue leftValue; StackValue rightValue; - if (callable instanceof IntrinsicMethod) { - // Compare two primitive values - type = comparisonOperandType(expressionType(left), expressionType(right)); + Type leftType = expressionType(left); + Type rightType = expressionType(right); + if (isPrimitive(leftType) && isPrimitive(rightType)) { + type = comparisonOperandType(leftType, rightType); leftValue = gen(left); rightValue = gen(right); } diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/intrinsics/CompareTo.kt b/compiler/backend/src/org/jetbrains/kotlin/codegen/intrinsics/CompareTo.kt index a465b46395f..20b9d1a91e3 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/intrinsics/CompareTo.kt +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/intrinsics/CompareTo.kt @@ -71,7 +71,7 @@ public class CompareTo : IntrinsicMethod() { //TODO seems we need to different CompareTo override fun supportCallable(): Boolean { - return false + return true } override fun toCallable(method: CallableMethod): ExtendedCallable {