anchor.diff:    String _parseNumber() {
       String number = "";
   
  -    String character = _json[_index];
  -    while(_numberCharacters.contains(character)) {
  -      number += character;
  -      _index++;
  -      if (_index == _json.length) {
  -        break;
  -      }
  -      character = _json[_index];
  +    while(_numberCharacters.contains(_peekCharacter())) {
  +      number += _consumeCharacter();
  +//      if (_index == _json.length) {
  +//        break;
  +//      }
       }
       return number;
     }
   
     String _parseString() {
  -    _index++;
  +    _consumeCharacter(); //We don't care about the starting quotation mark
       String string = "";
  -    String character = _json[_index];
  +    String character = _consumeCharacter();
       while (character != '"') {
         if (character == r"\") {
           string += _parseEscapedStringFragment();
         } else {
           string += character;
  -        _index++;
         }
         if (_index == _json.length) {
           throw new LexerException("Invalid json fragment encountered: $string");
         }
  -      character = _json[_index];
  -    }
  -    _index++;
  +      character = _consumeCharacter();
  +    }
       return string;
     }
   
     String _parseEscapedStringFragment() {
  -    _index++;
  -    String character = _json[_index];
  -    _index++;
  +    String character = _consumeCharacter();
       switch (character) {
         case '"':
         case r'\':
  
positive.code:   }
  
    String _parseBool() {
      int remainingLength = _json.length - _index;
      if (remainingLength >= 5 && _json.substring(_index, _index + 5) == "false") {
        _index += 5;
        return "false";
      }
  
      if (remainingLength >= 4 && _json.substring(_index, _index + 4) == "true") {
        _index += 4;
        return "true";
      }
      throw new LexerException("Invalid json fragment encountered: $_json");
    }
  
    String _parseNull() {
      String value = "";
      int remainingLength = _json.length - _index;
      if (remainingLength >= 4 && _json.substring(_index, _index + 4) == "null") {
        _index += 4;
        return "null";
      }
      throw new LexerException("Invalid json fragment encountered: $value");
    }
  }
negative.code:     tokens = _convertJsonStringToTokens();
    }
  
    String _consumeCharacter() {
      String character = _json[_index];
      _index++;
      return character;
    }
  
    String _consumeCharacters(int count) {
      String fragment = _json.substring(_index, _index + count);
      _index += count;
      return fragment;
    }
  
    String _peekCharacter() {
      if (_index == _json.length) {
        return null;
      }
      return _json[_index];
    }
  
    void _consumeWhitespace() {
      while (_WHITESPACE.hasMatch(_peekCharacter())) {
        _consumeCharacter();
      }
    }
  
    Queue<Token> _convertJsonStringToTokens() {
      Queue<Token> tokens = new Queue();
      while(_index != _json.length) {
        _consumeWhitespace();
        String character = _peekCharacter();
  
        String value;
        ValueType valueType = _valueTypeMap[character];
  