anchor.diff:      }
   
       if (node._willSync(oldNode)) {
  -      _trace('_sync(statefull) ${node._key}');
  +      _traceSync(_SyncOperation.STATEFUL, node._key);
         oldNode._sync(node, host, insertBefore);
         node._defunct = true;
         assert(oldNode._root is sky.Node);
  
positive.code:     assert(_root != null);
      _removeChild(_built);
      _built = null;
      _unmountedComponents.add(this);
      super._remove();
    }
  
  
negative.code:   }
  }
  
  
  Set<Component> _mountedComponents = new HashSet<Component>();
  Set<Component> _unmountedComponents = new HashSet<Component>();
  
  void _enqueueDidMount(Component c) {
    assert(!_notifingMountStatus);
    _mountedComponents.add(c);
  }
  
  void _enqueueDidUnmount(Component c) {
    assert(!_notifingMountStatus);
    _unmountedComponents.add(c);
  }
  
  bool _notifingMountStatus = false;
  
  void _notifyMountStatusChanged() {
    try {
      _notifingMountStatus = true;
      _unmountedComponents.forEach((c) => c._didUnmount());
      _mountedComponents.forEach((c) => c._didMount());
      _mountedComponents.clear();
      _unmountedComponents.clear();
    } finally {
      _notifingMountStatus = false;
    }
  }
  
  List<Component> _dirtyComponents = new List<Component>();
  bool _buildScheduled = false;
  bool _inRenderDirtyComponents = false;
  
  
  void _buildDirtyComponents() {
    Stopwatch sw;
  