anchor.diff:    void invokeLayoutCallback(LayoutCallback callback) {
       assert(_debugMutationsLocked);
       assert(_debugDoingThisLayout);
  -    assert(!_debugDoingThisLayoutWithCallback);
  -    assert(() {
  -      _debugDoingThisLayoutWithCallback = true;
  -      return true;
  -    });
  -    callback(constraints);
  -    assert(() {
  -      _debugDoingThisLayoutWithCallback = false;
  -      return true;
  -    });
  +    assert(!_doingThisLayoutWithCallback);
  +    _doingThisLayoutWithCallback = true;
  +    try {
  +      callback(constraints);
  +    } finally {
  +      _doingThisLayoutWithCallback = false;
  +    }
     }
   
     // when the parent has rotated (e.g. when the screen has been turned
  
positive.code:       assert(node._relayoutSubtreeRoot == _relayoutSubtreeRoot);
        assert(node.parent != null);
        node = node.parent as RenderObject;
        if (!node._needsLayout)
          return false;
      }
      assert(node._relayoutSubtreeRoot == node);
  
negative.code:     if (_relayoutSubtreeRoot != this) {
        final parent = this.parent; // TODO(ianh): Remove this once the analyzer is cleverer
        assert(parent is RenderObject);
        if (!_doingThisLayoutWithCallback) {
          parent.markNeedsLayout();
        } else {
          assert(parent._debugDoingThisLayout);
        }
        assert(parent == this.parent); // TODO(ianh): Remove this once the analyzer is cleverer
      } else {
        _nodesNeedingLayout.add(this);
  