anchor.diff:  
     // Return this << n*_DIGIT_BITS.
     _Bigint _dlShift(int n) {
  -    var used = _used;
  +    final used = _used;
       if (used == 0) {
         return _ZERO;
       }
  -    var r_used = used + n;
  -    var digits = _digits;
  -    var r_digits = new Uint32List(r_used + (r_used & 1));
  +    final r_used = used + n;
  +    final digits = _digits;
  +    final r_digits = new Uint32List(r_used + (r_used & 1));
       var i = used;
       while (--i >= 0) {
         r_digits[i + n] = digits[i];
  
positive.code: 
    // Return this >> n*_DIGIT_BITS.
    _Bigint _drShift(int n) {
      var used = _used;
      if (used == 0) {
        return _ZERO;
      }
      var r_used = used - n;
      if (r_used <= 0) {
        return _neg ? _MINUS_ONE : _ZERO;
      }
      var digits = _digits;
      var r_digits = new Uint32List(r_used + (r_used & 1));
      for (var i = n; i < used; i++) {
        r_digits[i - n] = digits[i];
      }
      var r = new _Bigint(_neg, r_used, r_digits);
      if (_neg) {
        // Round down if any bit was shifted out.
        for (var i = 0; i < n; i++) {
  
negative.code:     return r_used;
    }
  
    // r_digits[0..r_used-1] = x_digits[0..x_used-1] >> n.
    static void _rsh(Uint32List x_digits, int x_used, int n,
                     Uint32List r_digits) {
      final ds = n ~/ _DIGIT_BITS;
      final bs = n % _DIGIT_BITS;
      final cbs = _DIGIT_BITS - bs;
      final bm = (1 << bs) - 1;
      var c = x_digits[ds] >> bs;
      final last = x_used - ds - 1;
      for (var i = 0; i < last; i++) {
        final d = x_digits[i + ds + 1];
        r_digits[i] = ((d & bm) << cbs) | c;
        c = d >> bs;
      }
      r_digits[last] = c;
    }
  
    // Return this >> n.
    _Bigint _rShift(int n) {
      final ds = n ~/ _DIGIT_BITS;
      final bs = n % _DIGIT_BITS;
      if (bs == 0) {
        return _drShift(ds);
      }
      final used = _used;
      final r_used = used - ds;
      if (r_used <= 0) {
        return _neg ? _MINUS_ONE : _ZERO;
      }
      final digits = _digits;
      final r_digits = new Uint32List(r_used + (r_used & 1));
      _rsh(digits, used, n, r_digits);
      final r = new _Bigint(_neg, r_used, r_digits);
      if (_neg) {
        // Round down if any bit was shifted out.
        if ((digits[ds] & ((1 << bs) - 1)) != 0) {
          return r._sub(_ONE);
        }
        for (var i = 0; i < ds; i++) {
  