)]}'
{
  "commit": "71baba09fef7c4897fe22648569803657f6f7a9d",
  "tree": "c7599fa5f9c46cf03f4f441ab7e5b3b1e7d31fe6",
  "parents": [
    "5bad6c518bf6663b69f505511a19c98c91f77c3a"
  ],
  "author": {
    "name": "Niels Lohmann",
    "email": "mail@nlohmann.me",
    "time": "Fri Nov 13 14:06:14 2026 +0100"
  },
  "committer": {
    "name": "Niels Lohmann",
    "email": "mail@nlohmann.me",
    "time": "Fri Nov 13 14:23:46 2026 +0100"
  },
  "message": "Keep only the beginning and the end of a long token for error messages\n\nFor \"last read\" in parse errors, the lexer keeps the text of the token it\nreads. The token start moves only at strings and numbers, so everything\nafter a string or number belongs to it until the next one starts. Input\nthat cannot be read again copies that text while parsing (the istream and\nFILE* adapters in their carry buffer, the lexer in token_string for\niterators), so valid input of 1 followed by 100,000,000 newlines peaked\nat about 225 MB, and a long string was kept a second time.\n\nReplace the carry buffer and token_string by token_text_buffer, which\nkeeps the first 4096 and at least the last 4112 characters of a token and\ndrops the characters in between where it would otherwise grow, so\nappending stays as cheap as before. get_token_string() shows a token of\nmore than 8192 characters as its first and last 4096 characters around\n\"...\", the same for every kind of input; contiguous input copies only\nthese parts.\n\nThe example input now peaks at 1.8 MB. Instruction counts of parsing\nfrom std::string, std::istream and FILE* are unchanged (clang 21 and\nGCC 15); parsing from std::list\u003cchar\u003e needs 1 to 17 % fewer.\n\nFixes #6120.\n\nSigned-off-by: Niels Lohmann \u003cmail@nlohmann.me\u003e\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "2f50bd6b4704b7303a83440c6466f84ef500dc3b",
      "old_mode": 33188,
      "old_path": "docs/mkdocs/docs/home/exceptions.md",
      "new_id": "c91e4fc369ba46677428af0e715b8c8bcc4d2349",
      "new_mode": 33188,
      "new_path": "docs/mkdocs/docs/home/exceptions.md"
    },
    {
      "type": "modify",
      "old_id": "b4c998259ff200044a3fcba8f6a2fcac08c10f98",
      "old_mode": 33188,
      "old_path": "include/nlohmann/detail/input/input_adapters.hpp",
      "new_id": "bc491222a943f3942fd6117bddbb44ed6fe5f4b3",
      "new_mode": 33188,
      "new_path": "include/nlohmann/detail/input/input_adapters.hpp"
    },
    {
      "type": "modify",
      "old_id": "1e1d4e8afbc59537d885a41fb3659af4b76eb27d",
      "old_mode": 33188,
      "old_path": "include/nlohmann/detail/input/lexer.hpp",
      "new_id": "54420867b6734520e3d70702c9915394640dced9",
      "new_mode": 33188,
      "new_path": "include/nlohmann/detail/input/lexer.hpp"
    },
    {
      "type": "modify",
      "old_id": "102eb94adce905bdb254e30d4ca27c90873db851",
      "old_mode": 33188,
      "old_path": "single_include/nlohmann/json.hpp",
      "new_id": "c7631d71d2e0455442da2114d5049dba99757889",
      "new_mode": 33188,
      "new_path": "single_include/nlohmann/json.hpp"
    },
    {
      "type": "modify",
      "old_id": "616999896bc1842ddd6b3bdc60828294a6fbc871",
      "old_mode": 33188,
      "old_path": "tests/src/unit-class_lexer.cpp",
      "new_id": "0f176df15435b50afc3c617fbddb7bba94d09506",
      "new_mode": 33188,
      "new_path": "tests/src/unit-class_lexer.cpp"
    },
    {
      "type": "modify",
      "old_id": "412d0dcb3bdd4b391bc511f5fc317302648f690b",
      "old_mode": 33188,
      "old_path": "tests/src/unit-class_parser.cpp",
      "new_id": "b015a87d03eac996985890499df32cde2eac8dee",
      "new_mode": 33188,
      "new_path": "tests/src/unit-class_parser.cpp"
    }
  ]
}
