anchor.diff:      if (char < CHAR_0 || char > CHAR_9) {
         fail(position, "Missing expected digit");
       }
  -    int handleLiteral(position) {
  -      String literal = source.substring(start, position);
  -      // This correctly creates -0 for doubles.
  -      num value = (isDouble ? double.parse(literal) : int.parse(literal));
  -      listener.handleNumber(value);
  -      return position;
  -    }
       if (char == CHAR_0) {
         position++;
  -      if (position == length) return handleLiteral(position);
  +      if (position == length) return _handleLiteral(start, position, false);
         char = source.codeUnitAt(position);
         if (CHAR_0 <= char && char <= CHAR_9) {
           fail(position);
  
positive.code:     }
    }
  
    int parseNumber(int char, int position) {
      // Format:
      //  '-'?('0'|[1-9][0-9]*)('.'[0-9]+)?([eE][+-]?[0-9]+)?
  
negative.code:       if (char < CHAR_0 || char > CHAR_9) fail(position);
        do {
          position++;
          if (position == length) return _handleLiteral(start, position, true);
          char = source.codeUnitAt(position);
        } while (CHAR_0 <= char && char <= CHAR_9);
      }
  