)]}'
{
  "commit": "7f161f017c367fce4801fd536765eaabbec2edb0",
  "tree": "523c43aeff161203b8dc7c9600bb415859bbc0a5",
  "parents": [
    "67d066e3970a5476d226672685ccdf08d6ff430a"
  ],
  "author": {
    "name": "Tom Sepez",
    "email": "tsepez@google.com",
    "time": "Thu Jun 18 12:34:49 2026 -0700"
  },
  "committer": {
    "name": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
    "email": "pdfium-scoped@luci-project-accounts.iam.gserviceaccount.com",
    "time": "Thu Jun 18 12:34:49 2026 -0700"
  },
  "message": "Make StringViewTemplate constexpr-compatible\n\nRefactor `StringViewTemplate` to store `CharType` instead of\n`UnsignedType` in its underlying span. This allows constructors and\nmost methods to be `constexpr`, enabling compile-time string view\nmanipulation.\n\nKey changes:\n- Update `StringViewTemplate` member `span_` to store `const\n  CharType`.\n- Update constructors to be `constexpr` and use `UNSAFE_BUFFERS`\n  where necessary to satisfy static analysis.\n- Ensure empty views constructed from empty spans (e.g., cleared\n  vectors) resolve to `nullptr` data, preserving legacy behavior.\n- Define a local `constexpr ToLowerASCII` helper in\n  `string_view_template.h` to enable `constexpr` evaluation of\n  `EqualsASCIINoCase` without circular header dependencies.\n- Make various member functions `constexpr` (`begin()`, `end()`,\n  `operator[]`, `IsASCII()`, `EqualsASCII()`, `EqualsASCIINoCase()`,\n  `Substr()`, comparisons, etc.).\n- Add compile-time `static_assert` tests to `bytestring_unittest.cpp`\n  and `widestring_unittest.cpp` to verify `constexpr` behavior for\n  both `ByteStringView` and `WideStringView`.\n\nTAG\u003dagy\nCONV\u003d2983ff4c-f8b3-4c12-abb7-150795162e3c\n\nChange-Id: I7e8ee486a7a4977adeb9db25766a11d144e10db4\nReviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/150090\nReviewed-by: Lei Zhang \u003cthestig@chromium.org\u003e\nCommit-Queue: Tom Sepez \u003ctsepez@chromium.org\u003e\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "7dae1814bdb9c10936e2bd42196c425cd8c09a6d",
      "old_mode": 33188,
      "old_path": "core/fxcrt/bytestring_unittest.cpp",
      "new_id": "ba98a537d22e1646c0a479a430918ccdaec5f2ff",
      "new_mode": 33188,
      "new_path": "core/fxcrt/bytestring_unittest.cpp"
    },
    {
      "type": "modify",
      "old_id": "2d4f3a285878c3246fe341f5dba649d177460563",
      "old_mode": 33188,
      "old_path": "core/fxcrt/string_view_template.h",
      "new_id": "a15cf12f1575fa8afa68798f83715eb471d45f03",
      "new_mode": 33188,
      "new_path": "core/fxcrt/string_view_template.h"
    },
    {
      "type": "modify",
      "old_id": "291a3e9c77954df5d70aa3c066315e94f1900284",
      "old_mode": 33188,
      "old_path": "core/fxcrt/widestring_unittest.cpp",
      "new_id": "8f546a7a051b705ca8370a63115bc0b18fe7b94a",
      "new_mode": 33188,
      "new_path": "core/fxcrt/widestring_unittest.cpp"
    }
  ]
}
