anchor.diff:        scheduler.ensureVisualUpdate();
       }
     }
  +  void _cleanRelayoutSubtreeRoot() {
  +    if (_relayoutSubtreeRoot != this) {
  +      _relayoutSubtreeRoot = null;
  +      _needsLayout = true;
  +      _cleanRelayoutSubtreeRootChildren();
  +    }
  +  }
  +  void _cleanRelayoutSubtreeRootChildren() { } // workaround for lack of inter-class mixins in Dart
     void scheduleInitialLayout() {
       assert(attached);
       assert(parent == null);
  
positive.code:   void detachChildren() {
      if (_child != null)
        _child.detach();
    }
    String debugDescribeChildren(String prefix) {
      if (child != null)
  
negative.code:       child = child.parentData.nextSibling;
      }
    }
    void _cleanRelayoutSubtreeRootChildren() {
      ChildType child = _firstChild;
      while (child != null) {
        child._cleanRelayoutSubtreeRoot();
        assert(child.parentData is ParentDataType);
        child = child.parentData.nextSibling;
      }
    }
  
    ChildType get firstChild => _firstChild;
    ChildType get lastChild => _lastChild;
  