diff --git a/idea/src/org/jetbrains/jet/codegen/ExpressionCodegen.java b/idea/src/org/jetbrains/jet/codegen/ExpressionCodegen.java index ee56cc8c2ad..045fa9e7999 100644 --- a/idea/src/org/jetbrains/jet/codegen/ExpressionCodegen.java +++ b/idea/src/org/jetbrains/jet/codegen/ExpressionCodegen.java @@ -480,6 +480,21 @@ public class ExpressionCodegen extends JetVisitor { } return; } + else if (className.equals("Hashable")) { + if (op.getName().equals("equals")) { + final Type leftType = typeMapper.mapType(bindingContext.getExpressionType(expression.getLeft())); + final Type rightType = typeMapper.mapType(bindingContext.getExpressionType(expression.getRight())); + if (leftType == Type.INT_TYPE && rightType == Type.INT_TYPE) { + gen(expression.getLeft(), Type.INT_TYPE); + gen(expression.getRight(), Type.INT_TYPE); + myStack.push(StackValue.icmp(JetTokens.EQEQ)); + return; + } + else { + throw new UnsupportedOperationException("Don't know how to generate equality for these types"); + } + } + } else { throw new UnsupportedOperationException("Don't know how to generate binary op for class " + className); } diff --git a/idea/src/org/jetbrains/jet/codegen/StackValue.java b/idea/src/org/jetbrains/jet/codegen/StackValue.java index e7cb625ca02..ceafe2c8f4f 100644 --- a/idea/src/org/jetbrains/jet/codegen/StackValue.java +++ b/idea/src/org/jetbrains/jet/codegen/StackValue.java @@ -128,7 +128,10 @@ public abstract class StackValue { @Override public void condJump(Label label, boolean jumpIfFalse, InstructionAdapter v) { int opcode; - if (opToken == JetTokens.GT) { + if (opToken == JetTokens.EQEQ) { + opcode = jumpIfFalse ? Opcodes.IF_ICMPNE : Opcodes.IF_ICMPEQ; + } + else if (opToken == JetTokens.GT) { opcode = jumpIfFalse ? Opcodes.IF_ICMPLE : Opcodes.IF_ICMPGT; } else if (opToken == JetTokens.LT) {