anchor.diff:    LazyExpression isNotType(_Var variable, String type) {
       return () {
         var expr = _Expression();
  -      flow.isExpression_end(expr, variable, true, _Type(type));
  +      _flow.isExpression_end(expr, variable, true, _Type(type));
         return expr;
       };
     }
  
positive.code:   LazyExpression notNull(_Var variable) {
      return () {
        var expr = _Expression();
        flow.conditionEqNull(expr, variable, notEqual: true);
        return expr;
      };
    }
  
negative.code:       // x, y, and z.  We promote x and y in the continue path, and x and z in
        // the current path.  Inside the updater, only x should be promoted.
        var h = _Harness();
        var x = h.addVar('x', 'int?');
        var y = h.addVar('y', 'int?');
        var z = h.addVar('z', 'int?');
        h.run((flow) {
          h.declare(x, initialized: true);
          h.declare(y, initialized: true);
          h.declare(z, initialized: true);
          var stmt = _Statement();
          flow.for_conditionBegin({});
          flow.for_bodyBegin(stmt, h.expr());
          h.if_(h.expr, () {
            h.promote(x, 'int');
            h.promote(y, 'int');
            flow.handleContinue(stmt);
          });
          h.promote(x, 'int');
          h.promote(z, 'int');
          flow.for_updaterBegin();
          expect(flow.promotedType(x).type, 'int');
          expect(flow.promotedType(y), isNull);
          expect(flow.promotedType(z), isNull);
          flow.for_end();
        });
      });
  
      test('for_end() joins break and condition-false states', () {
  