anchor.diff:          i2++;
           i++;
         } else if ((_bitmap & mask) != 0) {
  -        _ANodeBase<K, V> newMap = _array[i1];
  +        _NodeBase<K, V> newMap = _array[i1];
           newarray[i] = newMap;
           newSize += newMap.length;
           i1++;
           i++;
         } else if ((m._bitmap & mask) != 0) {
  -        _ANodeBase<K, V> newMap = m._array[i2];
  +        _NodeBase<K, V> newMap = m._array[i2];
           newarray[i] = newMap;
           newSize += newMap.length;
           i2++;
  
positive.code:         } else {
            assert(_array.length == 2);
            assert(index == 0 || index == 1);
            _ANodeBase<K, V> onlyValueLeft = _array[1 - index];
            return (onlyValueLeft is _Leaf)
                ? onlyValueLeft
                : new _SubMap.ensureOwner(this, owner, _bitmap ^ mask,
                              <_ANodeBase<K, V>>[onlyValueLeft],
                              length + delta);
          }
        } else if (newm is _Leaf){
          if (_array.length == 1) {
            return newm;
          } else {
            List<_ANodeBase<K, V>> newarray = _makeCopyIfNeeded(owner, this._owner, _array);
            newarray[index] = newm;
            return new _SubMap.ensureOwner(this, owner, _bitmap, newarray, length + delta);
          }
        } else {
          List<_ANodeBase<K, V>> newarray = _makeCopyIfNeeded(owner, this._owner, _array);
          newarray[index] = newm;
  
          return new _SubMap.ensureOwner(this, owner, _bitmap, newarray, length + delta);
  
negative.code:       _unionWithSubMap(_Owner owner, _SubMap<K, V> m, V combine(V x, V y), int depth) {
      int ormap = _bitmap | m._bitmap;
      int andmap = _bitmap & m._bitmap;
      List<_NodeBase<K, V>> newarray =
          new List<_NodeBase<K, V>>(_popcount(ormap));
      int mask = 1, i = 0, i1 = 0, i2 = 0;
      int newSize = 0;
      while (mask <= ormap) {
        if ((andmap & mask) != 0) {
          _array[i1];
          m._array[i2];
          _NodeBase<K, V> newMap =
              m._array[i2]._unionWith(owner, _array[i1], combine, depth + 1);
          newarray[i] = newMap;
          newSize += newMap.length;
  