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