anchor.diff:  
   tdiv(var a, var b) {
     if (checkNumbers(a, b)) {
  -    // TODO(floitsch): Find cleaner way of forcing the type.
  -    a = JS('num', '#', a);
  -    b = JS('num', '#', b);
  -    return (a / b).truncate();
  +    return (JS('num', @'# / #', a, b)).truncate();
     }
     return UNINTERCEPTED(a ~/ b);
   }
  
positive.code: shr(var a, var b) {
    // TODO(floitsch): inputs must be integers.
    if (checkNumbers(a, b)) {
      // TODO(floitsch): Find cleaner way of forcing the type.
      a = JS('num', '#', a);
      b = JS('num', '#', b);
      if (b < 0) throw new IllegalArgumentException(b);
      if (a > 0) {
        // JavaScript only looks at the last 5 bits of the shift-amount. In JS
        // shifting by 33 is hence equivalent to a shift by 1. Shortcut the
        // computation when that happens.
        if (b > 31) return 0;
        // Given that 'a' is positive we must not use '>>'. Otherwise a number
        // that has the 31st bit set would be treated as negative and shift in
        // ones.
  
negative.code: shl(var a, var b) {
    // TODO(floitsch): inputs must be integers.
    if (checkNumbers(a, b)) {
      if (JS('num', '#', b) < 0) throw new IllegalArgumentException(b);
      // JavaScript only looks at the last 5 bits of the shift-amount. Shifting
      // by 33 is hence equivalent to a shift by 1.
      if (JS('bool', @'# > 31', b)) return 0;
      return JS('num', @'(# << #) >>> 0', a, b);
    }
    return UNINTERCEPTED(a << b);
  