CompareTo fix

This commit is contained in:
Michael Bogdanov
2015-04-02 19:46:51 +03:00
parent 8552dd60ae
commit 8ec0cd18b7
2 changed files with 7 additions and 7 deletions
@@ -2363,7 +2363,8 @@ public class ExpressionCodegen extends JetVisitor<StackValue, StackValue> implem
//justCoerce //justCoerce
receiver.put(receiver.type, v); receiver.put(receiver.type, v);
callableMethod.beforeParameterGeneration(v, StackValue.onStack(receiver.type)); callableMethod.beforeParameterGeneration(v, StackValue.onStack(receiver.type));
} else { }
else {
callableMethod.beforeParameterGeneration(v, null); callableMethod.beforeParameterGeneration(v, null);
receiver.put(receiver.type, v); receiver.put(receiver.type, v);
} }
@@ -3259,18 +3260,17 @@ public class ExpressionCodegen extends JetVisitor<StackValue, StackValue> implem
private StackValue generateComparison(JetBinaryExpression expression, StackValue receiver) { private StackValue generateComparison(JetBinaryExpression expression, StackValue receiver) {
ResolvedCall<?> resolvedCall = getResolvedCallWithAssert(expression, bindingContext); ResolvedCall<?> resolvedCall = getResolvedCallWithAssert(expression, bindingContext);
FunctionDescriptor descriptor = (FunctionDescriptor) resolvedCall.getResultingDescriptor();
JetExpression left = expression.getLeft(); JetExpression left = expression.getLeft();
JetExpression right = expression.getRight(); JetExpression right = expression.getRight();
Callable callable = resolveToCallable(descriptor, false, resolvedCall);
Type type; Type type;
StackValue leftValue; StackValue leftValue;
StackValue rightValue; StackValue rightValue;
if (callable instanceof IntrinsicMethod) { Type leftType = expressionType(left);
// Compare two primitive values Type rightType = expressionType(right);
type = comparisonOperandType(expressionType(left), expressionType(right)); if (isPrimitive(leftType) && isPrimitive(rightType)) {
type = comparisonOperandType(leftType, rightType);
leftValue = gen(left); leftValue = gen(left);
rightValue = gen(right); rightValue = gen(right);
} }
@@ -71,7 +71,7 @@ public class CompareTo : IntrinsicMethod() {
//TODO seems we need to different CompareTo //TODO seems we need to different CompareTo
override fun supportCallable(): Boolean { override fun supportCallable(): Boolean {
return false return true
} }
override fun toCallable(method: CallableMethod): ExtendedCallable { override fun toCallable(method: CallableMethod): ExtendedCallable {