anchor.diff:      assert(_DIGIT_BITS == 32);  // Otherwise this code needs to be revised.
       var shift;
       if (_used > 2 || (_used == 2 && _digits[1] > 0x10000000)) {
  +      if (other == 0) return 0;  // Shifted value is zero.
         throw new OutOfMemoryError();
       } else {
         shift = ((_used == 2) ? (_digits[1] << _DIGIT_BITS) : 0) + _digits[0];
  
positive.code:     var c = 0;
      var i = x_used;
      while (--i >= 0) {
        r_digits[i + ds + 1] = (x_digits[i] >> cbs) | c;
        c = (x_digits[i] & bm) << bs;
      }
      r_digits[ds] = c;
      i = ds;
      while (--i >= 0) {
        r_digits[i] = 0;
      }
      if (r_used.isOdd) {
        r_digits[r_used] = 0;
      }
      return r_used;
  
negative.code:     if (div) {
        // Return quotient, i.e. r_digits[y_used..r_used-1] with proper sign.
        r_digits = _cloneDigits(r_digits, y_used, r_used, r_used - y_used);
        var r = new _Bigint(false, r_used - y_used, r_digits);
        if (_neg != a._neg && r._used > 0) {
          r = r._negate();
        }
  