case RSH: stack.push(JSU.N(JSU.toLong(left) >> JSU.toLong(right))); break;
case URSH: stack.push(JSU.N(JSU.toLong(left) >>> JSU.toLong(right))); break;
- //#repeat </<=/>/>= LT/LE/GT/GE
- case LT: {
+ case LT: case LE: case GT: case GE: {
+ int cmp = 0;
if(left instanceof JSString && right instanceof JSString)
- stack.push(JSU.B(JSU.toString(left).compareTo(JSU.toString(right)) < 0));
+ cmp = JSU.toString(left).compareTo(JSU.toString(right));
else
- stack.push(JSU.B(JSU.toDouble(left) < JSU.toDouble(right)));
+ cmp = (int)(100 * (JSU.toDouble(left) - JSU.toDouble(right)));
+ switch(op) {
+ case LE: stack.push(JSU.B(cmp <= 0)); break;
+ case LT: stack.push(JSU.B(cmp < 0)); break;
+ case GE: stack.push(JSU.B(cmp >= 0)); break;
+ case GT: stack.push(JSU.B(cmp > 0)); break;
+ default: throw new RuntimeException("impossible");
+ }
+ break;
}
- //#end
case EQ:
case NE: {