break now works; support generation of == for integers

This commit is contained in:
Dmitry Jemerov
2011-04-02 20:20:00 +02:00
parent 8650c39e72
commit 81d75552a3
2 changed files with 19 additions and 1 deletions
@@ -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);
}
@@ -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) {