anchor.diff:    /// A local variable is [initialized] if its declaration has an initializer.
     /// A function parameter is always initialized, so [initialized] is `true`.
     FlowModel<Variable, Type> declare(Variable variable, bool initialized) {
  -    VariableModel<Variable, Type> newInfoForVar = _freshVariableInfo;
  -    if (initialized) {
  -      newInfoForVar = newInfoForVar.initialize();
  -    }
  +    VariableModel<Variable, Type> newInfoForVar =
  +        new VariableModel.fresh(assigned: initialized);
   
       return _updateVariableInfo(variable, newInfoForVar);
     }
   
     /// Gets the info for the given [variable], creating it if it doesn't exist.
     VariableModel<Variable, Type> infoFor(Variable variable) =>
  -      variableInfo[variable] ?? _freshVariableInfo;
  +      variableInfo[variable] ?? new VariableModel.fresh();
   
     /// Builds a [FlowModel] based on `this`, but extending the `tested` set to
     /// include types from [other].  This is used at the bottom of certain kinds
  
positive.code:   /// variable that is no longer in scope.
    final Map<Variable, VariableModel<Variable, Type> /*!*/ > variableInfo;
  
    /// Variable model for variables that have never been seen before.
    final VariableModel<Variable, Type> _freshVariableInfo;
  
    /// The empty map, used to [join] variables.
    final Map<Variable, VariableModel<Variable, Type>> _emptyVariableMap = {};
  
  
negative.code:         );
  
    @visibleForTesting
    FlowModel.withInfo(this.reachable, this.variableInfo) {
      assert(reachable != null);
      assert(() {
        for (VariableModel<Variable, Type> value in variableInfo.values) {
  