anchor.diff:      while (aEndNode.key == bStartNode.key) {
         aEndNode.update(bStartNode, context);
   
  -      parent.moveChild(aEndNode, a[aStart], context);
  +      parent._moveChild(aEndNode, a[aStart], context);
   
         aEnd--;
         bStart++;
  
positive.code:     final nextPos = bEnd + 1;
      final next = nextPos < b.length ? b[nextPos] : null;
      while (bStart <= bEnd) {
        parent.insertChild(b[bStart++], next, context, attached);
      }
    } else if (bStart > bEnd) {
      // All nodes from [b] are updated, remove the rest from [a].
      while (aStart <= aEnd) {
        parent.removeChild(a[aStart++], context);
      }
    } else {
      // Perform more complex update algorithm on the remaining nodes.
  
negative.code:               updated = true;
                break;
              }
              parent._insertChild(bNode, aNode, context, attached);
            }
          }
  
          if (updated) {
            while (i < b.length) {
              parent._insertChild(b[i++], null, context, attached);
            }
          } else {
            parent._removeChild(aNode, context);
          }
        } else if (b.length == 1) {
          // fast path when [b] have 1 child
  