anchor.diff:    void updateSemanticsNode({
       @required RenderObject rendering,
       @required SemanticsNode semantics,
  -    @required SemanticsNode parentSemantics,
     }) {
       assert(rendering != null);
       assert(semantics != null);
  -    assert(parentSemantics != null);
  -    assert(parentSemantics.wasAffectedByClip != null);
       semantics.transform = _transform;
       final Rect semanticBounds = rendering.semanticBounds;
       if (_clipRect != null) {
  
positive.code:     if (geometry != null) {
        geometry.applyAncestorChain(_ancestorChain);
        if (_introducesOwnNode)
          geometry.updateSemanticsNode(rendering: renderObjectOwner, semantics: node, parentSemantics: parentSemantics);
      } else {
        assert(_ancestorChain.length == 1);
      }
  
negative.code:       yield* child.compile(
          geometry: new _SemanticsGeometry.copy(geometry),
          currentSemantics: null,
        );
      }
    }
  