anchor.diff:      // 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();
  +    var paddingDigits = '';
       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);
  -        }
  +        paddingDigits = symbols.ZERO_DIGIT * howManyDigitsTooBig.toInt();
  +
           intValue = (intValue / divisor).truncate();
       }
       var integerDigits = "${intValue}${paddingDigits}".codeUnits;
  
positive.code:    */
    bool _hasPrintableIntegerPart(int intValue) =>
        intValue > 0 || minimumIntegerDigits > 0;
  
    /**
     * Create a new empty buffer. See comment on [_buffer] variable for why
     * we have it as an instance variable rather than passing it on the stack.
     */
    void _newBuffer() { _buffer = new StringBuffer(); }
  
    /** A group of methods that provide support for writing digits and other
     * required characters into [_buffer] easily.
  
negative.code:   }
  
    /** Variables used in [_parseTrunk] and [parseTrunkCharacter]. */
    var decimalPos = -1;
    var digitLeftCount = 0;
    var zeroDigitCount = 0;
    var digitRightCount = 0;
    var groupingCount = -1;
  
    /**
     * Parse the "trunk" portion of the pattern, the piece that doesn't include
     * positive or negative prefixes or suffixes.
     */
    String _parseTrunk() {
      var loop = true;
      var trunk = new StringBuffer();
      while (pattern.current != null && loop) {
        loop = parseTrunkCharacter(trunk);
      }
  
      if (zeroDigitCount == 0 && digitLeftCount > 0 && decimalPos >= 0) {
  