anchor.diff:      }
   
       if (oldNode != null) {
  -      if (oldNode.runtimeType == node.runtimeType && oldNode.key == node.key) {
  -        if (node._retainStatefulNodeIfPossible(oldNode)) {
  +      if (oldNode.runtimeType == newNode.runtimeType && oldNode.key == newNode.key) {
  +        if (newNode._retainStatefulNodeIfPossible(oldNode)) {
             assert(oldNode.mounted);
  -          assert(!node.mounted);
  +          assert(!newNode.mounted);
             oldNode.setParent(this);
  -          oldNode._sync(node, slot);
  +          oldNode._sync(newNode, slot);
             assert(oldNode.root is RenderObject);
             return oldNode;
           }
  
positive.code:   void detachRoot();
  
    // Returns the child which should be retained as the child of this node.
    Widget syncChild(Widget node, Widget oldNode, dynamic slot) {
  
      assert(oldNode is! Component || (oldNode is Component && !oldNode._disqualifiedFromEverAppearingAgain)); // TODO(ianh): Simplify this once the analyzer is cleverer
  
      if (node == oldNode) {
        assert(node == null || node.mounted);
        assert(node is! RenderObjectWrapper || (node is RenderObjectWrapper && node._ancestor != null)); // TODO(ianh): Simplify this once the analyzer is cleverer
        return node; // Nothing to do. Subtrees must be identical.
      }
  
      if (node == null) {
        // the child in this slot has gone away
        assert(oldNode.mounted);
        oldNode.detachRoot();
  
negative.code:   //      assert(_built != null && old == null)
    // 3) Syncing against an old version
    //      assert(_built == null && old != null)
    void _sync(Component old, dynamic slot) {
      assert(_built == null || old == null);
      assert(!_disqualifiedFromEverAppearingAgain);
  
      _slot = slot;
  
      var oldBuilt;
      if (old == null) {
        oldBuilt = _built;
      } else {
        assert(_built == null);
        oldBuilt = old._built;
      }
  
      int lastOrder = _currentOrder;
  