anchor.diff:      return this;
     }
   
  +  /// Updates the state to indicate that the given [variables] are no longer
  +  /// promoted; they are presumed to have their declared types.
     State<Variable, Type> removePromotedAll(Set<Variable> variables) {
       var newPromoted = _removePromotedAll(promoted, variables);
   
  
positive.code:     this.promoted,
    );
  
    /// Add a new [variable] to track definite assignment.
    State<Variable, Type> add(Variable variable, {bool assigned: false}) {
      var newNotAssigned = assigned ? notAssigned : notAssigned.add(variable);
  
  
negative.code:     );
    }
  
    /// Updates the state to reflect a control path that is known to have
    /// previously passed through some [other] state.
    ///
    /// The control flow path is considered reachable if both this state and the
    /// other state are reachable.  Variables are considered definitely assigned
    /// if they were definitely assigned in either this state or the other state.
    /// Variable type promotions are taken from this state, unless the promotion
    /// in the other state is more specific, and the variable is "safe".  A
    /// variable is considered safe if there is no chance that it was assigned
    /// more recently than the "other" state.
    State<Variable, Type> restrict(
      TypeOperations<Variable, Type> typeOperations,
      _VariableSet<Variable> emptySet,
  