anchor.diff:        if (_ancestor is RenderObjectWrapper)
           _ancestor.insertChildRoot(this, slot);
       } else {
  -      assert(old is RenderObjectWrapper);
  +      assert(old.runtimeType == runtimeType);
         _renderObject = old.renderObject;
         _ancestor = old._ancestor;
         assert(_renderObject != null);
  
positive.code:       }
      }
  
      bool searchForOldNode() {
        if (currentNode.key == null)
          return false; // never re-order these nodes
  
        ensureOldIdMap();
        oldNode = oldNodeIdMap[currentNode.key];
        if (oldNode == null)
          return false;
  
        oldNodeIdMap[currentNode.key] = null; // mark it reordered
        assert(renderObject is ContainerRenderObjectMixin);
        assert(old.renderObject is ContainerRenderObjectMixin);
        assert(oldNode.renderObject != null);
  
        if (old.renderObject == renderObject) {
          renderObject.move(oldNode.renderObject, before: nextSibling);
        } else {
          (old.renderObject as ContainerRenderObjectMixin).remove(oldNode.renderObject); // TODO(ianh): Remove cast once the analyzer is cleverer
          renderObject.add(oldNode.renderObject, before: nextSibling);
        }
  
        return true;
      }
  
      // Scan forwards, this time we may re-order;
  
negative.code:   void syncRenderObject(MultiChildRenderObjectWrapper old) {
      super.syncRenderObject(old);
  
      final ContainerRenderObjectMixin renderObject = this.renderObject; // TODO(ianh): Remove this once the analyzer is cleverer
      assert(renderObject is ContainerRenderObjectMixin);
      assert(old == null || old.renderObject == renderObject);
  
      var startIndex = 0;
      var endIndex = children.length;
  