anchor.diff:  
     @override
     void nonNullAssert_end(Expression operand) {
  -    ExpressionInfo<Variable, Type> operandInfo = _getExpressionInfo(operand);
  -    if (operandInfo is _VariableReadInfo<Variable, Type>) {
  -      _current = _current
  -          .tryMarkNonNullable(typeOperations, operandInfo._variable)
  -          .ifTrue;
  +    Variable operandVariable = _getExpressionVariable(operand);
  +    if (operandVariable != null) {
  +      _current =
  +          _current.tryMarkNonNullable(typeOperations, operandVariable).ifTrue;
       }
     }
   
  
positive.code:   @override
    void isExpression_end(Expression isExpression, Expression subExpression,
        bool isNot, Type type) {
      ExpressionInfo<Variable, Type> subExpressionInfo =
          _getExpressionInfo(subExpression);
      if (subExpressionInfo is _VariableReadInfo<Variable, Type>) {
        ExpressionInfo<Variable, Type> expressionInfo =
            _current.tryPromoteForTypeCheck(
                typeOperations, subExpressionInfo._variable, type);
        _storeExpressionInfo(isExpression,
            isNot ? ExpressionInfo.invert(expressionInfo) : expressionInfo);
      }
  
negative.code:       'afterBodyAndCatches: $_afterBodyAndCatches)';
  }
  
  /// [_FlowContext] representing a `while` loop (or a C-style `for` loop, which
  /// is functionally similar).
  class _WhileContext<Variable, Type>
  