anchor.diff:     * of formatting then there will only ever be one number being formatted
      * at a time. In languages with threads we'd need to pass this on the stack.
      */
  -  StringBuffer _buffer;
  +  final StringBuffer _buffer = new StringBuffer();
   
     /**
      * Create a number format that prints using [newPattern] as it applies in
  
positive.code:     // If the int part is larger than 2^52 and we're on Javascript (so it's
      // really a float) it will lose precision, so pad out the rest of it
      // with zeros. Check for Javascript by seeing if an integer is double.
      var paddingDigits = new StringBuffer();
      if (1 is double && intValue > _maxInt) {
          var howManyDigitsTooBig = (log(intValue) / LN10).ceil() - 16;
          var divisor = pow(10, howManyDigitsTooBig).round();
          for (var each in new List(howManyDigitsTooBig.toInt())) {
            paddingDigits.write(symbols.ZERO_DIGIT);
          }
          intValue = (intValue / divisor).truncate();
      }
      var integerDigits = "${intValue}${paddingDigits}".codeUnits;
  
negative.code:  */
  class _StringIterator implements Iterator<String> {
    final String input;
    int nextIndex = 0;
    String _current = null;
  
    _StringIterator(input) : input = _validate(input);
  
    String get current => _current;
  
    bool moveNext() {
      if (nextIndex >= input.length) {
        _current = null;
        return false;
      }
      _current = input[nextIndex++];
      return true;
    }
  
    String get peek => nextIndex >= input.length ? null : input[nextIndex];
  
    Iterator<String> get iterator => this;
  
    static String _validate(input) {
      if (input is! String) throw new ArgumentError(input);
      return input;
    }
  
  }
  