)]}'
{
  "commit": "d3a1de25e33ca1cfb99c3efdfc6dfb6e462946ea",
  "tree": "d1f47b5ef916eafeaf04fa94a14ac9ff14ff2380",
  "parents": [
    "209a7237b959f70f48b6515ba1b4774dc49410be"
  ],
  "author": {
    "name": "Behdad Esfahbod",
    "email": "behdad@behdad.org",
    "time": "Sat May 02 11:32:17 2026 -0600"
  },
  "committer": {
    "name": "Behdad Esfahbod",
    "email": "behdad@behdad.org",
    "time": "Sat May 02 11:32:17 2026 -0600"
  },
  "message": "[array] Replace std::sort with internal sort_r_simple\n\nstd::sort instantiates several internal STL helpers\n(__introsort_loop, __insertion_sort, __adjust_heap, __heap_select,\n__unguarded_linear_insert) as weak symbols in the std:: namespace.\nThese leaked into libharfbuzz.so for every distinct (T, Compar)\npair, polluting the public ABI surface.\n\nRoute hb_array_t::qsort(Compar) through our existing templated\nsort_r_simple instead.  The comparator is still inlined into the\nsort body (sort_r_simple has been comparator-templated since\n05762b2fac).\n\nDrop the bool-returning comparator overload in favor of a single\nint-sign convention; convert the call sites added during the\nstd::sort migration back to int-sign comparators.\n\nStep 1 of two: this restores ABI hygiene at the cost of typed-\nelement swap (sort_r_simple swaps byte-by-byte).  A follow-up\nwill introduce a typed sort to recover that perf.\n\nTested: 240/240 tests pass; nm -D libharfbuzz.so shows zero\nremaining _ZSt sort weak symbols.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "2799d84910ba0f74fc9a0832e06f9001825f01b7",
      "old_mode": 33188,
      "old_path": "src/hb-array.hh",
      "new_id": "fafaf00b2182f22d5cf9f34352566a04b0d0d84b",
      "new_mode": 33188,
      "new_path": "src/hb-array.hh"
    },
    {
      "type": "modify",
      "old_id": "f4edc9b16dbe95ce3edef18280c8e0843ea92158",
      "old_mode": 33188,
      "old_path": "src/hb-cairo-utils.cc",
      "new_id": "d0888d4c5f469643dc338adf7f7e77e6e204b7dd",
      "new_mode": 33188,
      "new_path": "src/hb-cairo-utils.cc"
    },
    {
      "type": "modify",
      "old_id": "d62bd9605f43f72f27047d1482b2098e915437aa",
      "old_mode": 33188,
      "old_path": "src/hb-face-builder.cc",
      "new_id": "579ef27477511886a91775e835245ee43ffb58d4",
      "new_mode": 33188,
      "new_path": "src/hb-face-builder.cc"
    },
    {
      "type": "modify",
      "old_id": "ea4753257702210233489d315a2edbd5b4a622dd",
      "old_mode": 33188,
      "old_path": "src/hb-gpu-draw.cc",
      "new_id": "a05996e2c100efad0a41969c93d967c75c27523c",
      "new_mode": 33188,
      "new_path": "src/hb-gpu-draw.cc"
    },
    {
      "type": "modify",
      "old_id": "3741f13d03849b9d72916f033ccd43cb8d3e4e42",
      "old_mode": 33188,
      "old_path": "src/hb-ot-post-table.hh",
      "new_id": "5aa97caa3b1fbe683a1d7a49a72292b6d6f8a2d0",
      "new_mode": 33188,
      "new_path": "src/hb-ot-post-table.hh"
    },
    {
      "type": "modify",
      "old_id": "4565635a70cd9ea077a6e2ee3f3e8cf91fa2aef2",
      "old_mode": 33188,
      "old_path": "src/hb-paint.cc",
      "new_id": "e272ec39b2bfb733250bd1400281a330a2943f92",
      "new_mode": 33188,
      "new_path": "src/hb-paint.cc"
    },
    {
      "type": "modify",
      "old_id": "64b52e421d96c9db7348ba0750fe1506849f6f50",
      "old_mode": 33188,
      "old_path": "src/hb-vector-paint-pdf.cc",
      "new_id": "1acf72f9ee5bdaf3cd3e69d0343f423c3bc89178",
      "new_mode": 33188,
      "new_path": "src/hb-vector-paint-pdf.cc"
    }
  ]
}
