anchor.diff:        y += child.size.height;
         child = child.parentData.nextSibling;
       }
  -    // FIXME(eseidel): Block lays out its children with unconstrained height
  -    // yet itself remains constrained. Remember that our children wanted to
  -    // be taller than we are so we know to clip them (and not cause confusing
  -    // mismatch of painting vs. hittesting).
  -    size = new Size(width, constraints.constrainHeight(y));
  -    _hasVisualOverflow = y > size.height;
  -    assert(!size.isInfinite);
  +    _childrenHeight = y;
     }
   
     void hitTestChildren(HitTestResult result, { Point position }) {
  
positive.code:   }
  
    void paint(PaintingCanvas canvas, Offset offset) {
      if (_hasVisualOverflow) {
        canvas.save();
        canvas.clipRect(offset & size);
      }
      defaultPaint(canvas, offset);
      if (_hasVisualOverflow) {
        canvas.restore();
      }
  
negative.code: 
  class BlockParentData extends BoxParentData with ContainerParentDataMixin<RenderBox> { }
  
  abstract class RenderBlockBase extends RenderBox with ContainerRenderObjectMixin<RenderBox, BlockParentData>,
                                                        RenderBoxContainerDefaultsMixin<RenderBox, BlockParentData> {
  
    // lays out RenderBox children in a vertical stack
    // uses the maximum width provided by the parent
  
    bool _hasVisualOverflow = false;
  
    RenderBlockBase({
      List<RenderBox> children
    }) {
      addAll(children);
  