anchor.diff:      if (identical(_expressionWithInfo, oldExpression)) {
         _expressionWithInfo = newExpression;
       }
  +    if (identical(_expressionWithVariable, oldExpression)) {
  +      _expressionWithVariable = newExpression;
  +    }
     }
   
     @override
  
positive.code:       // but weak mode it might produce an "equal" result.  We don't want flow
        // analysis behavior to depend on mode, so we conservatively assume that
        // either result is possible.
      } else if (lhsInfo is _NullInfo<Variable, Type> &&
          rhsInfo is _VariableReadInfo<Variable, Type>) {
        assert(
            leftOperandTypeClassification == TypeClassification.nullOrEquivalent);
        ExpressionInfo<Variable, Type> equalityInfo =
            _current.tryMarkNonNullable(typeOperations, rhsInfo._variable);
        _storeExpressionInfo(wholeExpression,
            notEqual ? equalityInfo : ExpressionInfo.invert(equalityInfo));
      } else if (rhsInfo is _NullInfo<Variable, Type> &&
          lhsInfo is _VariableReadInfo<Variable, Type>) {
        ExpressionInfo<Variable, Type> equalityInfo =
            _current.tryMarkNonNullable(typeOperations, lhsInfo._variable);
        _storeExpressionInfo(wholeExpression,
            notEqual ? equalityInfo : ExpressionInfo.invert(equalityInfo));
      }
  
negative.code:   @override
    void ifNullExpression_rightBegin(
        Expression leftHandSide, Type leftHandSideType) {
      Variable lhsVariable = _getExpressionVariable(leftHandSide);
      FlowModel<Variable, Type> promoted;
      _current = _current.split();
      if (lhsVariable != null) {
        ExpressionInfo<Variable, Type> promotionInfo =
            _current.tryMarkNonNullable(typeOperations, lhsVariable);
        _current = promotionInfo.ifFalse;
        promoted = promotionInfo.ifTrue;
      } else {
  