CompareTo fix
This commit is contained in:
@@ -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 {
|
||||||
|
|||||||
Reference in New Issue
Block a user