)]}'
{
  "log": [
    {
      "commit": "55cf8fb38ae30c086458f28daa1e84ba4e24e501",
      "tree": "9d4be7a234b1717a8344591308b83b6199fa2d5e",
      "parents": [
        "47c108de75939137fec1a2c6cd8c60d6ab49feb7"
      ],
      "author": {
        "name": "Aaron Webster",
        "email": "AaronWebster@users.noreply.github.com",
        "time": "Wed Jun 03 22:10:23 2026 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Jun 03 22:10:23 2026 -0700"
      },
      "message": "Extend switch matcher: disjunction, conjunction, single-entry demotion (#256)\n\nPR 241\u0027s _get_switch_candidate only matched bare \\`discrim \u003d\u003d K\\`\nequalities. Real protocol grammars express the same intent in many\nforms; this PR rewrites the matcher to recognize them all.\n\n_extract_switch_arms decomposes an existence_condition into a\n(discriminant, [(case_value, residual), ...]) tuple, handling:\n\n  * Bare equality (\\`tag \u003d\u003d K\\`) — one arm, no residual.\n  * Disjunction of equalities on a shared discriminant\n    (\\`tag \u003d\u003d A || tag \u003d\u003d B || tag \u003d\u003d C\\`) — one arm per Ki, no\n    residual. Common for tagged unions where several values share a\n    payload. Combined with the identical-body coalescing already in\n    place, this collapses to a single multi-label switch arm.\n  * Conjunction with an equality (\\`tag \u003d\u003d K \u0026\u0026 other_predicate\\`) —\n    one arm carrying \\`[other_predicate]\\` as residual. Useful for\n    nested guards like \\`if outer_flag \u0026\u0026 tag \u003d\u003d K\\`.\n  * Mixed shapes inside a disjunction:\n    \\`(tag \u003d\u003d 0 \u0026\u0026 a) || (tag \u003d\u003d 1 \u0026\u0026 b) || tag \u003d\u003d 2\\` — three arms\n    with respective residuals \\`[a]\\`, \\`[b]\\`, \\`[]\\`.\n\nAn arm with a residual emits the has_\\${field}()-based check as its\ncase body (the residual is folded into the existing accessor) — sound\nand lets the C++ compiler fold the case-pinned discriminant\ncomparison via inlining.\n\nA demotion pass measures total arm-entries per group and falls back\nto ok_method_test when the count is below 2 — without this, a lone\nfield like \\`if outer \u0026\u0026 tag \u003d\u003d K: xc\\` would get wrapped in a one-case\nswitch whose overhead (temporary, Known() guard, scope braces)\nexceeds the dedupe. This also fixes a latent bug introduced when\nrender-dedup was added: the scoped discriminant render mutated\nsubexpressions during the grouping pass, so groups that later got\ndemoted would have left dead \\`const auto \u003d ...\\` definitions in the\nemitted Ok(). The scoped render now happens at emit time, only for\nsurviving groups.\n\nThe benchmark schema gains a DisjunctionConditionals struct\nexercising three \\`||\\` chains (2, 3, 3 labels) and the benchmark TU\ngains a runtime test for it. Golden churn: many_conditionals.emb.h\ngains the new struct\u0027s output; condition.emb.h and virtual_field.emb.h\nshrink because several BasicConditional-style structs had a lone xc\nfield that PR 241 was wrapping in a one-arm switch — demotion brings\nthem back to the cheaper has_xc() check."
    },
    {
      "commit": "47c108de75939137fec1a2c6cd8c60d6ab49feb7",
      "tree": "23f7a6529dbb7ac538056e6ecec50596e2707d73",
      "parents": [
        "893c3f8407f2dbc4102e22b09497ba3a0381e30c"
      ],
      "author": {
        "name": "Aaron Webster",
        "email": "AaronWebster@users.noreply.github.com",
        "time": "Wed Jun 03 17:38:53 2026 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Jun 03 17:38:53 2026 -0700"
      },
      "message": "Render switch discriminant once per group; drop dead inner scope (#253)\n\n* Render switch discriminant once per group; drop dead inner scope\n\nThe optimized Ok() switch-block code in _generate_optimized_ok_method_body\nwas rendering each switch group\u0027s discriminant twice: once unscoped at\ngrouping time to build the SWITCH: key, and again with the active\nExpressionScope at emit time. Render it once with the scope and reuse\nthe result. The result is stable for equivalent discriminants because\nExpressionScope.add dedupes by inner rendered form, so it still works\nas a grouping key.\n\nThe ok_method_switch_block template\u0027s \\${inner_scope_definitions}\nplaceholder was unused — the inner ExpressionScope it referenced had\nnothing added to it. Removed both, which also drops the blank line\neach switch block carried in the goldens.\n\nNo behavioral change; purely compile-time cleanup. Golden churn\nlimited to the blank-line removal in four files (one line per existing\nswitch block).\n\n* Sort switch cases by value; coalesce identical-body cases (#254)\n\nThree composing changes to the optimized Ok() switch generator:\n\n1. Case-label sort. Each switch arm\u0027s labels are sorted by the\n   underlying integer/enum value before emit. _case_sort_key()\n   returns the int for sorting. Sorted cases give older embedded\n   GCCs (the ones shipped with microblaze-elf and many bare-metal\n   arm-none-eabi toolchains) a better shot at emitting a dense\n   jump table rather than an if-ladder.\n\n2. Identical-body coalescing. Cases whose rendered body text is\n   identical (same field set in the same order) are merged into a\n   single arm with multiple \\`case X:\\` labels. The C++ compiler\n   emits one body for the whole arm — a real text-size win once a\n   later PR (disjunction matching) starts producing such pairs.\n\n3. Multi-field per case. When two conditional fields share a\n   discriminant + case value (\\`if tag \u003d\u003d 0: a\\` and \\`if tag \u003d\u003d 0: b\\`),\n   they\u0027re now bundled into the same case arm rather than the second\n   falling back to a separate if-statement. Each field\u0027s validation\n   becomes one line of the case body.\n\nThe ok_method_switch_case template becomes ok_method_switch_arm,\ntaking pre-formatted \\${case_labels} and \\${case_body} strings.\nSingle-label single-field arms render identically to the old\ntemplate, so golden churn is limited to the f0_copy field in\ntestdata/many_conditionals.emb folding into case 0 of the\nLargeConditionals switch."
    },
    {
      "commit": "893c3f8407f2dbc4102e22b09497ba3a0381e30c",
      "tree": "0675a91abb50d5d177549b3bc76564d79e55521d",
      "parents": [
        "8ede6c1740c5b3b17bd00d5996e90d5e8facccd1"
      ],
      "author": {
        "name": "Aaron Webster",
        "email": "AaronWebster@users.noreply.github.com",
        "time": "Mon Jun 01 13:06:57 2026 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Jun 01 13:06:57 2026 -0700"
      },
      "message": "Add clang-format to c++ backend (#262)\n\n* Format generated C++ headers with clang-format\n\nApply Google-style clang-format to all generated .emb.h output, in\nboth the bazel codegen path (emboss_codegen_cpp.main) and the\nstandalone embossc driver.\n\nThe clang-format binary path is resolved through the new\ncompiler/back_end/cpp/clang_format_path module, which is the single\nseam to the underlying binary. The upstream version uses the\nclang-format PyPI package; downstream forks that cannot use the PyPI\npackage can replace just clang_format_path.py and its BUILD entry\nwith a shim returning an alternative path.\n\n* Regenerate build.json for new clang_format_path.py\n\n* Move clang_format import to module top in clang_format_path.py"
    },
    {
      "commit": "8ede6c1740c5b3b17bd00d5996e90d5e8facccd1",
      "tree": "61cb632e5b631eb61ee024e6f8d0a672ec85fce6",
      "parents": [
        "ac493421cb4dfb3404414735c22f64b8352d9841"
      ],
      "author": {
        "name": "Aaron Webster",
        "email": "AaronWebster@users.noreply.github.com",
        "time": "Wed May 20 12:01:40 2026 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed May 20 12:01:40 2026 -0700"
      },
      "message": "Add scripts/regenerate_goldens.py for batch golden regeneration (#251)\n\n* Add scripts/regenerate_goldens.py for batch golden regeneration\n\nMirrors the cpp_golden_test list in compiler/back_end/cpp/BUILD,\ninvoking embossc on each input .emb file to regenerate the\ncorresponding golden header. Makes generator changes (which usually\nrequire regenerating dozens of golden files) a one-command operation\ninstead of a per-file dance.\n\nAlso handles the testdata/imported_genfiles.emb genrule transform\nlocally and cleans up afterward so the produced file doesn\u0027t collide\nwith the bazel genrule on subsequent builds.\n\n* Note regenerate_goldens.py mirror in BUILD"
    },
    {
      "commit": "ac493421cb4dfb3404414735c22f64b8352d9841",
      "tree": "a18bfdcd715b177108ff11f21e24e3ea86f4c729",
      "parents": [
        "90a71f922b2bfb01e483e55e2d0fc5980c90782d"
      ],
      "author": {
        "name": "Aaron Webster",
        "email": "AaronWebster@users.noreply.github.com",
        "time": "Wed May 20 08:20:45 2026 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed May 20 08:20:45 2026 -0700"
      },
      "message": "Fix BUILD file formatting and action mnemonics (#261)\n\n* Fix BUILD file formatting and action mnemonics\n\n* Fix generated C++ switch statements"
    },
    {
      "commit": "90a71f922b2bfb01e483e55e2d0fc5980c90782d",
      "tree": "36b328c1e9b25f98e1012517d8b1297484890575",
      "parents": [
        "eb9efc41172864efa62d738ed424bdf2b6c47b26"
      ],
      "author": {
        "name": "Aaron Webster",
        "email": "AaronWebster@users.noreply.github.com",
        "time": "Tue May 19 18:19:53 2026 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue May 19 18:19:53 2026 -0700"
      },
      "message": "Fix TapPresubmit and Buildifier errors (#260)"
    },
    {
      "commit": "eb9efc41172864efa62d738ed424bdf2b6c47b26",
      "tree": "5013919b7f26e4ad366e7ec99442e201bfba2cfb",
      "parents": [
        "388ef22649c4898ebf6f0c7f0b58b1e846f87f65"
      ],
      "author": {
        "name": "Aaron Webster",
        "email": "AaronWebster@users.noreply.github.com",
        "time": "Tue May 19 17:50:23 2026 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue May 19 17:50:23 2026 -0700"
      },
      "message": "Fix TapPresubmit and Buildifier errors (#255)"
    },
    {
      "commit": "388ef22649c4898ebf6f0c7f0b58b1e846f87f65",
      "tree": "8ff247c01805ca71343dfab7d83c9616023e539b",
      "parents": [
        "1c8549ee58edac9bf7be1380e7feb1f5c8a891ad"
      ],
      "author": {
        "name": "dependabot[bot]",
        "email": "49699333+dependabot[bot]@users.noreply.github.com",
        "time": "Tue May 19 16:15:40 2026 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue May 19 16:15:40 2026 -0700"
      },
      "message": "Bump black from 24.8.0 to 26.3.1 in the pip group across 1 directory (#246)\n\n* Bump black from 24.8.0 to 26.3.1 in the pip group across 1 directory\n\nBumps the pip group with 1 update in the / directory: [black](https://github.com/psf/black).\n\n\nUpdates `black` from 24.8.0 to 26.3.1\n- [Release notes](https://github.com/psf/black/releases)\n- [Changelog](https://github.com/psf/black/blob/main/CHANGES.md)\n- [Commits](https://github.com/psf/black/compare/24.8.0...26.3.1)\n\n---\nupdated-dependencies:\n- dependency-name: black\n  dependency-version: 26.3.1\n  dependency-type: direct:production\n...\n\nSigned-off-by: dependabot[bot] \u003csupport@github.com\u003e\n\n* build: Add missing dependencies for black 26.3.1\n\n---------\n\nSigned-off-by: dependabot[bot] \u003csupport@github.com\u003e\nCo-authored-by: dependabot[bot] \u003c49699333+dependabot[bot]@users.noreply.github.com\u003e\nCo-authored-by: Aaron Webster \u003cwebstera@google.com\u003e"
    },
    {
      "commit": "1c8549ee58edac9bf7be1380e7feb1f5c8a891ad",
      "tree": "15ceeea9e21fd85171a38815fa3db2bd2f2d7bed",
      "parents": [
        "b296060daf7ee58c3c6d091d231aebe198dc2bc4"
      ],
      "author": {
        "name": "Aaron Webster",
        "email": "AaronWebster@users.noreply.github.com",
        "time": "Tue May 19 16:10:31 2026 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue May 19 16:10:31 2026 -0700"
      },
      "message": "Fix buildifier and presubmit issues (#250)"
    },
    {
      "commit": "b296060daf7ee58c3c6d091d231aebe198dc2bc4",
      "tree": "599c3d9e5daf3689a3126de437022b08f5bef084",
      "parents": [
        "cd86a25c5f41e18229963c07fe578e8175a4e28b"
      ],
      "author": {
        "name": "Aaron Webster",
        "email": "AaronWebster@users.noreply.github.com",
        "time": "Tue May 19 12:22:11 2026 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue May 19 12:22:11 2026 -0700"
      },
      "message": "Update enumerate_parse_errors.py\n\nThe string in question can\u0027t be part of the code as google-internal checks will block review/submission."
    },
    {
      "commit": "cd86a25c5f41e18229963c07fe578e8175a4e28b",
      "tree": "3d7dddb4d9c39fa3a638021602328f1fff899e48",
      "parents": [
        "188c9f24f8d81ba8049d84c41e37589127667c4b"
      ],
      "author": {
        "name": "Salman Chishti",
        "email": "salmanmkc@GitHub.com",
        "time": "Tue May 19 01:46:13 2026 +0100"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon May 18 17:46:13 2026 -0700"
      },
      "message": "Upgrade GitHub Actions to latest versions (#248)\n\nSigned-off-by: Salman Muin Kayser Chishti \u003c13schishti@gmail.com\u003e\nCo-authored-by: Aaron Webster \u003cwebstera@google.com\u003e"
    },
    {
      "commit": "188c9f24f8d81ba8049d84c41e37589127667c4b",
      "tree": "813396b4302b52fd409458896ae1b0aa59fb8f3d",
      "parents": [
        "9eae5eb09b9a9e064850e5797cb9c072f3183f0d",
        "d4cd926dac65e0efd796404311d6b29084d568e1"
      ],
      "author": {
        "name": "Aaron Webster",
        "email": "AaronWebster@users.noreply.github.com",
        "time": "Mon May 18 17:14:21 2026 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon May 18 17:14:21 2026 -0700"
      },
      "message": "Merge pull request #241 from google/optimized-conditionals-v3\n\nOptimize C++ generated code for structures with many conditional fields"
    },
    {
      "commit": "d4cd926dac65e0efd796404311d6b29084d568e1",
      "tree": "813396b4302b52fd409458896ae1b0aa59fb8f3d",
      "parents": [
        "f11f09815a43978ee9bc4febbbfd19302c0c566c"
      ],
      "author": {
        "name": "Aaron Webster",
        "email": "webstera@google.com",
        "time": "Mon May 18 16:23:55 2026 -0700"
      },
      "committer": {
        "name": "Aaron Webster",
        "email": "webstera@google.com",
        "time": "Mon May 18 16:55:21 2026 -0700"
      },
      "message": "Format python files with black\n"
    },
    {
      "commit": "f11f09815a43978ee9bc4febbbfd19302c0c566c",
      "tree": "32bfdffe74f56fe606bd225404d33c14041b5d20",
      "parents": [
        "8ad4b688ca9d506ec0b21538d54e789aefb8619d"
      ],
      "author": {
        "name": "Aaron Webster",
        "email": "webstera@google.com",
        "time": "Mon May 18 16:21:50 2026 -0700"
      },
      "committer": {
        "name": "Aaron Webster",
        "email": "webstera@google.com",
        "time": "Mon May 18 16:21:50 2026 -0700"
      },
      "message": "Fix duplicate case values in optimized Ok() switch generation\n"
    },
    {
      "commit": "8ad4b688ca9d506ec0b21538d54e789aefb8619d",
      "tree": "dc666b64ba5d519ae6bc590999b6cd0f6287a19b",
      "parents": [
        "0b5ba2f3001c0fe926a6781305020ad34bdd7592",
        "9eae5eb09b9a9e064850e5797cb9c072f3183f0d"
      ],
      "author": {
        "name": "Aaron Webster",
        "email": "webstera@google.com",
        "time": "Mon May 18 15:34:33 2026 -0700"
      },
      "committer": {
        "name": "Aaron Webster",
        "email": "webstera@google.com",
        "time": "Mon May 18 15:34:33 2026 -0700"
      },
      "message": "Merge remote-tracking branch \u0027origin/master\u0027 into optimized-conditionals-v3\n"
    },
    {
      "commit": "0b5ba2f3001c0fe926a6781305020ad34bdd7592",
      "tree": "ca3030f8fe5f61e0a6764e5711839dfc3fa8f689",
      "parents": [
        "c8cfee4d0478eef5abd060881e4e60d794afa8b1"
      ],
      "author": {
        "name": "Aaron Webster",
        "email": "webstera@google.com",
        "time": "Mon May 18 15:16:45 2026 -0700"
      },
      "committer": {
        "name": "Aaron Webster",
        "email": "webstera@google.com",
        "time": "Mon May 18 15:16:45 2026 -0700"
      },
      "message": "Address review comments for PR #241\n\n- Revert compiler_flags additions in one_golden_test.py (to be split out)\n- Restore testdata/__init__.py\n- Revert unrelated whitespace change in parser_types.py\n- Revert \u0027is_always_true\u0027 optimization to reduce golden churn\n- Add C++ test case `DuplicateCaseValueFallthrough` to verify switch behavior\n"
    },
    {
      "commit": "9eae5eb09b9a9e064850e5797cb9c072f3183f0d",
      "tree": "602eeb9274003c7bdd7998a004d270d63b036c37",
      "parents": [
        "1dc287fab90b33578f82ad86a299c86abbb25612"
      ],
      "author": {
        "name": "Salman Chishti",
        "email": "salmanmkc@GitHub.com",
        "time": "Sat Mar 21 03:30:14 2026 +0000"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Mar 20 20:30:14 2026 -0700"
      },
      "message": "Upgrade GitHub Actions for Node 24 compatibility (#247)\n\nSigned-off-by: Salman Muin Kayser Chishti \u003c13schishti@gmail.com\u003e"
    },
    {
      "commit": "1dc287fab90b33578f82ad86a299c86abbb25612",
      "tree": "9845b01345f72f9fb071d8d715d841410a9b3fd9",
      "parents": [
        "e24ea8ceb8a7cd915ce499d77cbd9613dfb8a674"
      ],
      "author": {
        "name": "Kushal SM",
        "email": "146661162+mrkushalsm@users.noreply.github.com",
        "time": "Fri Feb 13 00:20:04 2026 +0530"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Feb 12 10:50:04 2026 -0800"
      },
      "message": "Integrate Black formatter with Bazel for local development (#244)\n\nfix: Integrate black formatter with Bazel for local development\n\nAdds two bazel run targets for Python code formatting:\n- //:black_fix - Reformats Python files in-place\n- //:black_check - Checks formatting without modifying files\n\nResolves Issue #226"
    },
    {
      "commit": "c8cfee4d0478eef5abd060881e4e60d794afa8b1",
      "tree": "1d41bb8b427dea71251b0af21982bb7042cb124a",
      "parents": [
        "2d39b632b47bd1f7b41462cdbefe726cae3bc5ba"
      ],
      "author": {
        "name": "Aaron Webster",
        "email": "awebster@gmail.com",
        "time": "Thu Jan 29 11:13:29 2026 -0800"
      },
      "committer": {
        "name": "Aaron Webster",
        "email": "awebster@gmail.com",
        "time": "Thu Jan 29 11:13:29 2026 -0800"
      },
      "message": "Add many_conditionals golden test\n\nAdd golden file and test for many_conditionals.emb to ensure\nthe generated C++ header is tracked for review.\n"
    },
    {
      "commit": "2d39b632b47bd1f7b41462cdbefe726cae3bc5ba",
      "tree": "e758546d2ac4cd4cee4e2e331f1d181f0c35f7da",
      "parents": [
        "8ac209114d7ed0543c1522a720ce70655cb27c8e"
      ],
      "author": {
        "name": "Aaron Webster",
        "email": "awebster@gmail.com",
        "time": "Thu Jan 29 11:07:30 2026 -0800"
      },
      "committer": {
        "name": "Aaron Webster",
        "email": "awebster@gmail.com",
        "time": "Thu Jan 29 11:07:30 2026 -0800"
      },
      "message": "Update C++ golden test files\n\nRegenerate all golden .emb.h files to reflect changes from the\noptimized conditionals implementation.\n"
    },
    {
      "commit": "8ac209114d7ed0543c1522a720ce70655cb27c8e",
      "tree": "fe548cc882f7db79fc747ecd0de1a7e291cfa862",
      "parents": [
        "0f9f76c976b4b115efbe0d011533acd081cde71a",
        "e24ea8ceb8a7cd915ce499d77cbd9613dfb8a674"
      ],
      "author": {
        "name": "Aaron Webster",
        "email": "AaronWebster@users.noreply.github.com",
        "time": "Thu Jan 29 10:54:33 2026 -0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Jan 29 10:54:33 2026 -0800"
      },
      "message": "Merge branch \u0027master\u0027 into optimized-conditionals-v3"
    },
    {
      "commit": "e24ea8ceb8a7cd915ce499d77cbd9613dfb8a674",
      "tree": "9da674e5617c6c061eadf463cbbe9c2b70bdd6ba",
      "parents": [
        "41c1b64588792e23e60a2cef85b1ea4ed519ca7a",
        "6cb850a5b4c30f940d8600de423c38db3e4de299"
      ],
      "author": {
        "name": "Rob Russell",
        "email": "robrussell@users.noreply.github.com",
        "time": "Thu Jan 29 10:50:55 2026 -0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Jan 29 10:50:55 2026 -0800"
      },
      "message": "Merge pull request #243 from google/fix-bazel-9-compatibility\n\nFix Bazel 9 compatibility: add explicit load() for cc_* rules"
    },
    {
      "commit": "6cb850a5b4c30f940d8600de423c38db3e4de299",
      "tree": "9da674e5617c6c061eadf463cbbe9c2b70bdd6ba",
      "parents": [
        "e8ac40200eb712b9af2fca67550783911cec9ec3"
      ],
      "author": {
        "name": "Aaron Webster",
        "email": "awebster@gmail.com",
        "time": "Thu Jan 29 10:35:13 2026 -0800"
      },
      "committer": {
        "name": "Aaron Webster",
        "email": "awebster@gmail.com",
        "time": "Thu Jan 29 10:35:13 2026 -0800"
      },
      "message": "Update dependencies and build rules for Bazel 9 compatibility\n\n- Update MODULE.bazel dependency versions:\n  - abseil-cpp: 20230125.1 -\u003e 20240722.0\n  - googletest: 1.14.0.bcr.1 -\u003e 1.17.0.bcr.2 (Bazel 9 compatible)\n  - rules_python: 0.31.0 -\u003e 1.0.0\n  - rules_cc: 0.0.17 -\u003e 0.1.0\n\n- Update build_defs.bzl for Bazel 9 API changes:\n  - Load cc_common from @rules_cc//cc/common:cc_common.bzl\n  - Use find_cc_toolchain from @rules_cc//cc:find_cc_toolchain.bzl\n  - Update _cc_toolchain attribute to use @rules_cc//cc:current_cc_toolchain\n  - Use use_cc_toolchain() for toolchain resolution\n\n- Update .bazelrc to use C++17 (required by googletest 1.17+)\n"
    },
    {
      "commit": "e8ac40200eb712b9af2fca67550783911cec9ec3",
      "tree": "7f036d8ae516e9fc341d9f4a148db96440f8907a",
      "parents": [
        "4514655fff13d417faab8ece5637ba99f12679ff"
      ],
      "author": {
        "name": "Aaron Webster",
        "email": "awebster@gmail.com",
        "time": "Thu Jan 29 10:21:21 2026 -0800"
      },
      "committer": {
        "name": "Aaron Webster",
        "email": "awebster@gmail.com",
        "time": "Thu Jan 29 10:21:21 2026 -0800"
      },
      "message": "Load CcInfo from rules_cc for Bazel 9 compatibility\n"
    },
    {
      "commit": "4514655fff13d417faab8ece5637ba99f12679ff",
      "tree": "33109c698b89839c45965f3b87900ce32a37a94e",
      "parents": [
        "ee21b495efe5143b4aeb138f6cd645d620fc98f4"
      ],
      "author": {
        "name": "Aaron Webster",
        "email": "awebster@gmail.com",
        "time": "Thu Jan 29 10:16:54 2026 -0800"
      },
      "committer": {
        "name": "Aaron Webster",
        "email": "awebster@gmail.com",
        "time": "Thu Jan 29 10:16:54 2026 -0800"
      },
      "message": "Add rules_cc dependency and py_test load statement\n\n- Add bazel_dep for rules_cc to MODULE.bazel so @rules_cc is available\n- Add py_test load to compiler/back_end/cpp/BUILD\n"
    },
    {
      "commit": "ee21b495efe5143b4aeb138f6cd645d620fc98f4",
      "tree": "38dd22263116047c0afbfceafb0fdaedb980447b",
      "parents": [
        "41c1b64588792e23e60a2cef85b1ea4ed519ca7a"
      ],
      "author": {
        "name": "Aaron Webster",
        "email": "awebster@gmail.com",
        "time": "Thu Jan 29 10:13:16 2026 -0800"
      },
      "committer": {
        "name": "Aaron Webster",
        "email": "awebster@gmail.com",
        "time": "Thu Jan 29 10:13:16 2026 -0800"
      },
      "message": "Fix Bazel 9 compatibility: add explicit load() for cc_* rules\n\nBazel 9 removed native cc_library, cc_test, and cc_binary rules from\nthe global scope. They now require explicit load() statements from\n@rules_cc.\n\n- Add load(\"@rules_cc//cc:cc_library.bzl\", \"cc_library\") to BUILD files\n- Add load(\"@rules_cc//cc:cc_test.bzl\", \"cc_test\") to BUILD files\n- Update build_defs.bzl macros to use loaded cc_test instead of\n  native.cc_test\n"
    },
    {
      "commit": "0f9f76c976b4b115efbe0d011533acd081cde71a",
      "tree": "94a950ae5e461dbcb67c73a0ba5b1a46bdbf5acd",
      "parents": [
        "ef26abdd159a9f0f9a4b6a03041880aa815b23ce"
      ],
      "author": {
        "name": "Aaron Webster",
        "email": "awebster@gmail.com",
        "time": "Thu Jan 29 10:08:13 2026 -0800"
      },
      "committer": {
        "name": "Aaron Webster",
        "email": "awebster@gmail.com",
        "time": "Thu Jan 29 10:08:13 2026 -0800"
      },
      "message": "Fix Black formatting\n"
    },
    {
      "commit": "ef26abdd159a9f0f9a4b6a03041880aa815b23ce",
      "tree": "ba41349b25cc008a1159747588d3c1323d829aca",
      "parents": [
        "8ea51fb31d3734ce0f12ed7c428e71679332b9db"
      ],
      "author": {
        "name": "Aaron Webster",
        "email": "awebster@gmail.com",
        "time": "Thu Jan 29 10:04:23 2026 -0800"
      },
      "committer": {
        "name": "Aaron Webster",
        "email": "awebster@gmail.com",
        "time": "Thu Jan 29 10:04:23 2026 -0800"
      },
      "message": "Address review comments from PR #235\n\n- Remove [[nodiscard]] annotations (C++17 feature) and create separate\n  issue #242 to discuss C++14 vs C++17 support\n- Remove redundant check in ExpressionScope.add() that was already\n  covered by the parent scope lookup\n- Revert unnecessary style change in _render_existence_test\n- Add comprehensive docstring to _generate_optimized_ok_method_body\n  explaining the switch optimization with examples\n- Refactor switch/if generation to use templates for better readability\n- Optimize trivially-true conditions to skip if-block wrapper when\n  condition is statically known to be true\n"
    },
    {
      "commit": "8ea51fb31d3734ce0f12ed7c428e71679332b9db",
      "tree": "1589dbfb3eb01fee7aef384a8b8d493b72e36488",
      "parents": [
        "1a14004dcb96f30bbd46db6ed877b96fae6ca8e6"
      ],
      "author": {
        "name": "Aaron Webster",
        "email": "webstera@google.com",
        "time": "Wed Dec 03 10:58:44 2025 -0800"
      },
      "committer": {
        "name": "Aaron Webster",
        "email": "webstera@google.com",
        "time": "Wed Dec 03 11:05:04 2025 -0800"
      },
      "message": "feat(cpp): Optimize generated C++ accessors and control flow\n"
    },
    {
      "commit": "1a14004dcb96f30bbd46db6ed877b96fae6ca8e6",
      "tree": "9281df5a1db948235d9603025cdf2a22d2076b0a",
      "parents": [
        "41c1b64588792e23e60a2cef85b1ea4ed519ca7a"
      ],
      "author": {
        "name": "Aaron Webster",
        "email": "webstera@google.com",
        "time": "Tue Dec 02 15:27:50 2025 -0800"
      },
      "committer": {
        "name": "Aaron Webster",
        "email": "webstera@google.com",
        "time": "Tue Dec 02 15:27:50 2025 -0800"
      },
      "message": "Port optimized conditionals v2\n"
    },
    {
      "commit": "41c1b64588792e23e60a2cef85b1ea4ed519ca7a",
      "tree": "bae4c641816e878e7cda795780fae2848edb2781",
      "parents": [
        "dee76937a219b417b12f24ff766d6fda4eb45a27",
        "90018e61488c64c1ae5772902bd286709f45affc"
      ],
      "author": {
        "name": "Aaron Webster",
        "email": "AaronWebster@users.noreply.github.com",
        "time": "Tue Dec 02 15:01:58 2025 -0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Dec 02 15:01:58 2025 -0800"
      },
      "message": "Merge pull request #201 from reventlov/error_example_generator\n\nError example generator"
    },
    {
      "commit": "dee76937a219b417b12f24ff766d6fda4eb45a27",
      "tree": "73d182b92253a0f4f56d6764ee9f7501a880e974",
      "parents": [
        "f595908cba6f366746d6834a2e885868d1a836cd",
        "85ea44804ac23303b9c00761cc1809f4bfed51f2"
      ],
      "author": {
        "name": "Aaron Webster",
        "email": "AaronWebster@users.noreply.github.com",
        "time": "Tue Dec 02 15:00:42 2025 -0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Dec 02 15:00:42 2025 -0800"
      },
      "message": "Merge pull request #202 from reventlov/fix_includes\n\nFix some #includes"
    },
    {
      "commit": "f595908cba6f366746d6834a2e885868d1a836cd",
      "tree": "fcfa0a7a86eb2fbd7eed358d2064b3447c756535",
      "parents": [
        "ef974c728fe80b816e8e63e7b2c387ece06b9d90"
      ],
      "author": {
        "name": "Eric Rahm",
        "email": "erahm@google.com",
        "time": "Thu Oct 02 23:47:51 2025 +0000"
      },
      "committer": {
        "name": "Eric Rahm",
        "email": "ericrahm@gmail.com",
        "time": "Thu Oct 02 17:07:10 2025 -0700"
      },
      "message": "Update repo_token for releases\n\nUpdate the release workflow to use a new personal access token.\n"
    },
    {
      "commit": "ef974c728fe80b816e8e63e7b2c387ece06b9d90",
      "tree": "a725584653b4b0c0f95d99321438c977cd21bdd6",
      "parents": [
        "4c8334b762004f2f7d2f27d3ebc1d6fe5b475f0f"
      ],
      "author": {
        "name": "Eric Rahm",
        "email": "erahm@google.com",
        "time": "Wed Oct 01 17:36:00 2025 +0000"
      },
      "committer": {
        "name": "Eric Rahm",
        "email": "ericrahm@gmail.com",
        "time": "Thu Oct 02 14:51:08 2025 -0700"
      },
      "message": "Update docs to include notes on build.json\n\nAdd details on how to update `build.json` and generate the build files.\n"
    },
    {
      "commit": "4c8334b762004f2f7d2f27d3ebc1d6fe5b475f0f",
      "tree": "06e72d454afef2f3e52cfe58c32ebb2a6e9e379f",
      "parents": [
        "666402b73cab753266a9cf234036e6a103bc4c11"
      ],
      "author": {
        "name": "Eric Rahm",
        "email": "erahm@google.com",
        "time": "Wed Oct 01 17:32:22 2025 +0000"
      },
      "committer": {
        "name": "Eric Rahm",
        "email": "ericrahm@gmail.com",
        "time": "Thu Oct 02 14:51:08 2025 -0700"
      },
      "message": "Add build files and generator script\n\nAdds a `generate_build_files.py` script that is used to generate build\nfiles for use in bazel, cmake, and GN. Additionally a clean json file is\nadded for more generic usage. These files are intended to be included in\ndownstream build systems to explicitly list out the files required by\nembossc and the C++ runtime.\n\nThe generated build files are included as well.\n"
    },
    {
      "commit": "666402b73cab753266a9cf234036e6a103bc4c11",
      "tree": "a91064b782e12bf3158553d74899d39d63f45778",
      "parents": [
        "9866070acdca2034301e2e55c496514fbf0612b8"
      ],
      "author": {
        "name": "Eric Rahm",
        "email": "erahm@google.com",
        "time": "Wed Oct 01 17:30:21 2025 +0000"
      },
      "committer": {
        "name": "Eric Rahm",
        "email": "ericrahm@gmail.com",
        "time": "Thu Oct 02 14:51:08 2025 -0700"
      },
      "message": "Add CI verification of build.json\n\nAdds a check to the `verify-pull-request` CI workflow to make sure that\n`build.json` is in sync with the bazel build targets.\n"
    },
    {
      "commit": "9866070acdca2034301e2e55c496514fbf0612b8",
      "tree": "3cd7a8929e3d83b0c051f612c2c4b489d39ad119",
      "parents": [
        "ae6ae2b6a9fa4a509625d42feac5c4e34c412cb8"
      ],
      "author": {
        "name": "Eric Rahm",
        "email": "erahm@google.com",
        "time": "Tue Sep 30 21:09:24 2025 +0000"
      },
      "committer": {
        "name": "Eric Rahm",
        "email": "ericrahm@gmail.com",
        "time": "Thu Oct 02 14:51:08 2025 -0700"
      },
      "message": "Add build.json and generator script\n\nThis commit introduces a new script, `manage_build_json.py`, which\nqueries Bazel to determine the source files for the Emboss compiler\nand C++ runtime.\n\nThe script generates a `build.json` file in the project root, which\nwill serve as the source of truth for generating build helper files\nfor other build systems.\n\nThe script also adds support for verifying that `build.json` is in\nsync with the bazel build targets.\n"
    },
    {
      "commit": "ae6ae2b6a9fa4a509625d42feac5c4e34c412cb8",
      "tree": "85b24efa52ae142fb563a6de1947659243b9454c",
      "parents": [
        "49c186a3287e921b55f3b04921ab6532a70a7550",
        "e7b26dfde608e8a13d1b2a57c888aaaf1e3a05e1"
      ],
      "author": {
        "name": "Jason Graffius",
        "email": "jasongraffius@gmail.com",
        "time": "Tue Sep 30 16:47:25 2025 -0400"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Sep 30 16:47:25 2025 -0400"
      },
      "message": "Merge pull request #231 from jasongraffius/fix-paths\n\nembossc: Revert path manipulation"
    },
    {
      "commit": "e7b26dfde608e8a13d1b2a57c888aaaf1e3a05e1",
      "tree": "85b24efa52ae142fb563a6de1947659243b9454c",
      "parents": [
        "49c186a3287e921b55f3b04921ab6532a70a7550"
      ],
      "author": {
        "name": "Jason Graffius",
        "email": "jasongraffius@gmail.com",
        "time": "Tue Sep 30 14:32:25 2025 -0400"
      },
      "committer": {
        "name": "Jason Graffius",
        "email": "jasongraffius@gmail.com",
        "time": "Tue Sep 30 14:32:28 2025 -0400"
      },
      "message": "embossc: Revert path manipulation\n\nRestore the sys.path manipulation temporarily while investigating a\npossible downstream issue.\n"
    },
    {
      "commit": "49c186a3287e921b55f3b04921ab6532a70a7550",
      "tree": "041de411a7928c4e9b19df58288446efaef75693",
      "parents": [
        "52779b4181b4df101802cdf38fd90944de293acd",
        "fccb41cf578e0b4668dd5157fe82776415b96266"
      ],
      "author": {
        "name": "Jason Graffius",
        "email": "jasongraffius@gmail.com",
        "time": "Tue Sep 30 12:47:03 2025 -0400"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Sep 30 12:47:03 2025 -0400"
      },
      "message": "Merge pull request #229 from reventlov/embossc_cleanup\n\n`embossc`: Remove unnecessary module path manipulation, and format with Black."
    },
    {
      "commit": "fccb41cf578e0b4668dd5157fe82776415b96266",
      "tree": "041de411a7928c4e9b19df58288446efaef75693",
      "parents": [
        "e23c43e10a9762285ea2f7a42ecf9e7aceed1201"
      ],
      "author": {
        "name": "Benjamin Olmstead",
        "email": "ben-emboss@xn13.com",
        "time": "Fri Aug 29 19:32:09 2025 -0700"
      },
      "committer": {
        "name": "Benjamin Olmstead",
        "email": "ben-emboss@xn13.com",
        "time": "Fri Aug 29 19:32:09 2025 -0700"
      },
      "message": "Clean up help strings post-Black.\n"
    },
    {
      "commit": "e23c43e10a9762285ea2f7a42ecf9e7aceed1201",
      "tree": "49b2b0d31755f90d098f57aae04a7c469f1b0e05",
      "parents": [
        "12ac01d15f3116853e8f4a7190ba3cfdca3e8ed4"
      ],
      "author": {
        "name": "Benjamin Olmstead",
        "email": "ben-emboss@xn13.com",
        "time": "Fri Aug 29 19:28:16 2025 -0700"
      },
      "committer": {
        "name": "Benjamin Olmstead",
        "email": "ben-emboss@xn13.com",
        "time": "Fri Aug 29 19:28:16 2025 -0700"
      },
      "message": "Small formatting fix.\n"
    },
    {
      "commit": "12ac01d15f3116853e8f4a7190ba3cfdca3e8ed4",
      "tree": "0bf56dc0d0b01a1ff41c5bfc33eaf1c213d4bd61",
      "parents": [
        "52779b4181b4df101802cdf38fd90944de293acd"
      ],
      "author": {
        "name": "Benjamin Olmstead",
        "email": "ben-emboss@xn13.com",
        "time": "Fri Aug 29 19:25:27 2025 -0700"
      },
      "committer": {
        "name": "Benjamin Olmstead",
        "email": "ben-emboss@xn13.com",
        "time": "Fri Aug 29 19:25:27 2025 -0700"
      },
      "message": "`embossc`: Remove unnecessary module path manipulation and format with Black.\n"
    },
    {
      "commit": "52779b4181b4df101802cdf38fd90944de293acd",
      "tree": "affcd8dcf119dcc54c4a9a8f8e132c5e6d4e0fcc",
      "parents": [
        "f6152206fa4319993ea01a64c23b5e21ae63f2fc",
        "579fb7a2c1ad03ee4541730e66f47e20cf7b2def"
      ],
      "author": {
        "name": "Jason Graffius",
        "email": "jasongraffius@gmail.com",
        "time": "Fri Aug 29 21:35:05 2025 -0400"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Aug 29 21:35:05 2025 -0400"
      },
      "message": "Merge pull request #228 from reventlov/add_format_driver\n\nAdds standalone driver `emboss-format` for `compiler/front_end/format.py`"
    },
    {
      "commit": "579fb7a2c1ad03ee4541730e66f47e20cf7b2def",
      "tree": "affcd8dcf119dcc54c4a9a8f8e132c5e6d4e0fcc",
      "parents": [
        "c141316c8aa3b0627c6ef3b9c9bf4d3cf005dd58"
      ],
      "author": {
        "name": "Benjamin Olmstead",
        "email": "ben-emboss@xn13.com",
        "time": "Fri Aug 29 18:28:46 2025 -0700"
      },
      "committer": {
        "name": "Benjamin Olmstead",
        "email": "ben-emboss@xn13.com",
        "time": "Fri Aug 29 18:28:46 2025 -0700"
      },
      "message": "Remove unnecessary imports.\n"
    },
    {
      "commit": "c141316c8aa3b0627c6ef3b9c9bf4d3cf005dd58",
      "tree": "7e952f4ae95400fb8d40b694597e8bb0301d5a6e",
      "parents": [
        "1000a3ac852b8eb9a88925b047016c005bef61a9"
      ],
      "author": {
        "name": "Benjamin Olmstead",
        "email": "ben-emboss@xn13.com",
        "time": "Thu Aug 28 18:44:23 2025 -0700"
      },
      "committer": {
        "name": "Benjamin Olmstead",
        "email": "ben-emboss@xn13.com",
        "time": "Thu Aug 28 18:44:23 2025 -0700"
      },
      "message": "Simplify the script.\n"
    },
    {
      "commit": "1000a3ac852b8eb9a88925b047016c005bef61a9",
      "tree": "05b02e9e53e5a8d034ae273c9ed149378fc497b4",
      "parents": [
        "64040e1b3d8b3f0acd31c294b2055e392209d53a"
      ],
      "author": {
        "name": "Benjamin Olmstead",
        "email": "ben-emboss@xn13.com",
        "time": "Wed Aug 20 11:47:02 2025 -0700"
      },
      "committer": {
        "name": "Benjamin Olmstead",
        "email": "ben-emboss@xn13.com",
        "time": "Wed Aug 20 11:47:02 2025 -0700"
      },
      "message": "Correct script name.\n"
    },
    {
      "commit": "64040e1b3d8b3f0acd31c294b2055e392209d53a",
      "tree": "6d0d5a7ed0c2a0029786a42eeabe6f2d785e33ec",
      "parents": [
        "f6152206fa4319993ea01a64c23b5e21ae63f2fc"
      ],
      "author": {
        "name": "Benjamin Olmstead",
        "email": "ben-emboss@xn13.com",
        "time": "Wed Aug 20 11:42:27 2025 -0700"
      },
      "committer": {
        "name": "Benjamin Olmstead",
        "email": "ben-emboss@xn13.com",
        "time": "Wed Aug 20 11:42:27 2025 -0700"
      },
      "message": "Adds standalone driver `emboss-format` for `compiler/front_end/format.py`\n"
    },
    {
      "commit": "f6152206fa4319993ea01a64c23b5e21ae63f2fc",
      "tree": "231c814c66e65371c5c1ce2727d3a2874520fdcd",
      "parents": [
        "e301b7460842c990c0147edd1bc55047090a2240"
      ],
      "author": {
        "name": "Eric Rahm",
        "email": "erahm@google.com",
        "time": "Tue Jul 01 22:13:55 2025 +0000"
      },
      "committer": {
        "name": "Eric Rahm",
        "email": "ericrahm@gmail.com",
        "time": "Mon Jul 07 20:27:06 2025 -0700"
      },
      "message": "Add C++ golden file test suite\n\nThis change introduces a robust, granular testing infrastructure for the C++ backend using golden files. This test suite serves as a critical safety net to enable safe and efficient refactoring of the code generator in the future.\n\nBy comparing generated code against a set of \"golden\" (known-good) header files, we can quickly detect any unintended changes or regressions.\n\nKey Features:\n\n*   **Granular Tests:** Each golden file comparison is a standalone `py_test` target, allowing for parallel execution and precise failure identification.\n*   **`cpp_golden_test` Macro:** A new Starlark macro, `cpp_golden_test`, has been added to `compiler/back_end/cpp/build_defs.bzl`. This simplifies adding new golden tests by abstracting away the underlying `py_test` implementation details.\n*   **Debugging:** To simplify the diagnosis of regressions, test failures produce a `diff` of the generated file against its golden counterpart.\n*   **Full Coverage:** The suite includes tests for all `.emb` files in the `testdata` directory, including those with complex dependencies and imports.\n\nUsage:\n\n**To run all C++ golden tests:**\n```\nbazel test //compiler/back_end/cpp/... --test_tag_filters\u003dgolden\n```\n\n**To run a single golden test:**\n```\nbazel test //compiler/back_end/cpp:bits_golden_test\n```\n\n**To add a new golden test:**\n1.  Add your `.emb` file to `testdata/`.\n2.  Generate the corresponding golden `.emb.h` file (e.g., by temporarily modifying and running the `generate_golden_files.sh` script via a `sh_binary`).\n3.  Copy the new golden file into `testdata/golden_cpp/`.\n4.  Add a `cpp_golden_test()` rule to `compiler/back_end/cpp/BUILD`.\n"
    },
    {
      "commit": "e301b7460842c990c0147edd1bc55047090a2240",
      "tree": "9f0286482b2e649b1994ea85d26f2af83c731256",
      "parents": [
        "a0c2957977cd20fef084eeaa85082613dcb291b3"
      ],
      "author": {
        "name": "Eric Rahm",
        "email": "erahm@google.com",
        "time": "Tue Jul 01 22:13:55 2025 +0000"
      },
      "committer": {
        "name": "Eric Rahm",
        "email": "ericrahm@gmail.com",
        "time": "Tue Jul 01 16:42:09 2025 -0700"
      },
      "message": "Rename Message.HasField to Message.has_field\n\nThis change refactors `ir_data.Message.HasField` to `ir_data.Message.has_field`\nto conform to PEP-8 naming conventions. All call sites have been updated.\n\nFixes ##221\n"
    },
    {
      "commit": "a0c2957977cd20fef084eeaa85082613dcb291b3",
      "tree": "4a46725475abf8eadfda6bca2d8606f9ae28b377",
      "parents": [
        "34808da5b359a1653eda51d6014ec77b8411b385"
      ],
      "author": {
        "name": "Eric Rahm",
        "email": "erahm@google.com",
        "time": "Tue Jul 01 22:13:55 2025 +0000"
      },
      "committer": {
        "name": "Eric Rahm",
        "email": "ericrahm@gmail.com",
        "time": "Tue Jul 01 16:42:09 2025 -0700"
      },
      "message": "Remove pb reference\n\nJust removes a small reference to pb in our docs.\n\nIssue ##221\n"
    },
    {
      "commit": "34808da5b359a1653eda51d6014ec77b8411b385",
      "tree": "ded723dd4870fd8da9c702b3488f48639d907c40",
      "parents": [
        "3e621d71b78968d1f14760c4ac92b473f7278772",
        "dac4258daf3869c2d60ee6e01abf1de1d1b660ce"
      ],
      "author": {
        "name": "Jason Graffius",
        "email": "jasongraffius@gmail.com",
        "time": "Wed Jun 25 19:24:34 2025 -0400"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Jun 25 19:24:34 2025 -0400"
      },
      "message": "Merge pull request #218 from reventlov/design_docs_compiler\n\nDocument the `embossc` compiler design"
    },
    {
      "commit": "3e621d71b78968d1f14760c4ac92b473f7278772",
      "tree": "46d5db7bcaa7e6fb163626f290dec50ba236b100",
      "parents": [
        "2104ce4ecb6996ee1e56854d8d05b60fec2f87ee",
        "dd1252009ddcbea4f63791981b8965ae491087d3"
      ],
      "author": {
        "name": "Jason Graffius",
        "email": "jasongraffius@gmail.com",
        "time": "Fri May 09 10:57:17 2025 -0400"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri May 09 10:57:17 2025 -0400"
      },
      "message": "Merge pull request #220 from reventlov/cpp_dark_corners\n\nAdd draft document covering C++ dark corners."
    },
    {
      "commit": "dd1252009ddcbea4f63791981b8965ae491087d3",
      "tree": "a7306d1ff709dd42b063d3c409b5b7f34b80f448",
      "parents": [
        "1631d3e9be88f90a8347d64ade3b3ac6d9d8f294"
      ],
      "author": {
        "name": "Ben Olmstead",
        "email": "bolms@google.com",
        "time": "Fri Apr 04 17:16:32 2025 +0000"
      },
      "committer": {
        "name": "Ben Olmstead",
        "email": "bolms@google.com",
        "time": "Fri Apr 04 17:16:32 2025 +0000"
      },
      "message": "Add draft document covering C++ dark corners.\n"
    },
    {
      "commit": "1631d3e9be88f90a8347d64ade3b3ac6d9d8f294",
      "tree": "28d78768597562f813a36c3f05d851d20d37fa35",
      "parents": [
        "18275949e1528cadd21ccea0611575ef058e12e7"
      ],
      "author": {
        "name": "Ben Olmstead",
        "email": "bolms@google.com",
        "time": "Fri Apr 04 16:32:40 2025 +0000"
      },
      "committer": {
        "name": "Ben Olmstead",
        "email": "bolms@google.com",
        "time": "Fri Apr 04 16:32:40 2025 +0000"
      },
      "message": "Add draft document covering C++ dark corners.\n"
    },
    {
      "commit": "2104ce4ecb6996ee1e56854d8d05b60fec2f87ee",
      "tree": "0e1fb23df1bae37f9600aa0f5ca66010b342775e",
      "parents": [
        "5901d1258e27198f7d81337ad1acdc4b48de994a"
      ],
      "author": {
        "name": "Benjamin",
        "email": "bolms@google.com",
        "time": "Tue Feb 04 08:35:45 2025 -0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Feb 04 08:35:45 2025 -0800"
      },
      "message": "Update deprecated `assertRegexpMatches` to its new name. (#217)\n\n"
    },
    {
      "commit": "5901d1258e27198f7d81337ad1acdc4b48de994a",
      "tree": "b2f40dbe4c2066b804c318841de77c54e31737d2",
      "parents": [
        "18275949e1528cadd21ccea0611575ef058e12e7"
      ],
      "author": {
        "name": "Benjamin",
        "email": "bolms@google.com",
        "time": "Mon Feb 03 09:10:02 2025 -0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Feb 03 09:10:02 2025 -0800"
      },
      "message": "Fix ASAN failure in `array.rend()`. (#219)\n\nThe iterator constructor used `array[index]` to initialize an internal\r\ncached view (necessary so that `operator-\u003e` can return a pointer), which\r\ncaused pointer arithmetic overflow when `index` was -1 -- as in the case\r\nof `rend()`.\r\n\r\nThis change uses a checked `array.at(index)` method to get a null view\r\nwhen `index` is out of bounds.\r\n\r\nI considered changing `array[index]` to return a null view for\r\nout-of-bounds indexes, but user code may be inadvertently relying on\r\nthat behavior, so I am leaving it out of this bug fix."
    },
    {
      "commit": "dac4258daf3869c2d60ee6e01abf1de1d1b660ce",
      "tree": "cfae0c791eb47084c79260961de8edfd49817d91",
      "parents": [
        "80dfa445689d11c87c95a8d7069d185d94bec7d0"
      ],
      "author": {
        "name": "Ben Olmstead",
        "email": "bolms@google.com",
        "time": "Thu Jan 16 22:14:00 2025 +0000"
      },
      "committer": {
        "name": "Ben Olmstead",
        "email": "bolms@google.com",
        "time": "Thu Jan 16 22:14:00 2025 +0000"
      },
      "message": "Fix heading level for C++ Back End\n"
    },
    {
      "commit": "80dfa445689d11c87c95a8d7069d185d94bec7d0",
      "tree": "a6d412eebe4ae1f7905fa75446db02bf14993531",
      "parents": [
        "ca7b200d5272059edfa627ff21cbca2e5a5eba9f"
      ],
      "author": {
        "name": "Ben Olmstead",
        "email": "bolms@google.com",
        "time": "Thu Jan 16 22:11:18 2025 +0000"
      },
      "committer": {
        "name": "Ben Olmstead",
        "email": "bolms@google.com",
        "time": "Thu Jan 16 22:11:18 2025 +0000"
      },
      "message": "Reread and edit pass.\n"
    },
    {
      "commit": "ca7b200d5272059edfa627ff21cbca2e5a5eba9f",
      "tree": "88aab1c30c487bbf5a9f4e6d09c22131a652ebef",
      "parents": [
        "bbe9283f387739e442224485c2a4731be7c89fde"
      ],
      "author": {
        "name": "Ben Olmstead",
        "email": "bolms@google.com",
        "time": "Thu Jan 16 21:13:58 2025 +0000"
      },
      "committer": {
        "name": "Ben Olmstead",
        "email": "bolms@google.com",
        "time": "Thu Jan 16 21:13:58 2025 +0000"
      },
      "message": "More formatting fixes, slight rewording.\n"
    },
    {
      "commit": "bbe9283f387739e442224485c2a4731be7c89fde",
      "tree": "839209f45180878a3088e5661f8a246b65a086e1",
      "parents": [
        "9021c72e9ea55aaf17a60a3ce99c1f0261307421"
      ],
      "author": {
        "name": "Ben Olmstead",
        "email": "bolms@google.com",
        "time": "Thu Jan 16 21:11:23 2025 +0000"
      },
      "committer": {
        "name": "Ben Olmstead",
        "email": "bolms@google.com",
        "time": "Thu Jan 16 21:11:23 2025 +0000"
      },
      "message": "Fix minor syntax issues.\n"
    },
    {
      "commit": "9021c72e9ea55aaf17a60a3ce99c1f0261307421",
      "tree": "61ca8b71006e03a88616547b8baae35968858a13",
      "parents": [
        "18275949e1528cadd21ccea0611575ef058e12e7"
      ],
      "author": {
        "name": "Ben Olmstead",
        "email": "bolms@google.com",
        "time": "Thu Jan 16 21:02:40 2025 +0000"
      },
      "committer": {
        "name": "Ben Olmstead",
        "email": "bolms@google.com",
        "time": "Thu Jan 16 21:02:40 2025 +0000"
      },
      "message": "Document the design of `embossc`.\n"
    },
    {
      "commit": "18275949e1528cadd21ccea0611575ef058e12e7",
      "tree": "40f5119b9935cdbcb39be10865ad89d67738109d",
      "parents": [
        "615a9553d5d2c814001e914e9023f0bff77d5cef"
      ],
      "author": {
        "name": "Dmitri Prime",
        "email": "bolms@google.com",
        "time": "Sat Dec 21 10:18:31 2024 -0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sat Dec 21 10:18:31 2024 -0800"
      },
      "message": "Handle very large `.emb` files. (#215)\n\nThis change switches parse tree handling to use iteration (with an\r\nexplicit stack) instead of recursion, which:\r\n\r\n*   Allows large (\u003e~1000 entity) `.emb` files to be formatted.\r\n*   Allows very large (\u003e~16k entity) `.emb` files to be compiled.\r\n\r\nThe difference in sizes in the previous code was due to `module_ir.py`\r\nhackily increasing the recursion limit: while this more or less worked,\r\nit was a little dangerous (it ran the risk of blowing out the C stack,\r\ndepending on platform) and only increased the limit.  This change\r\nremoves the limit entirely (at least, up to the available memory on the\r\nsystem)."
    },
    {
      "commit": "615a9553d5d2c814001e914e9023f0bff77d5cef",
      "tree": "f4d19b2b03b23c14423613393db1247d48c5f904",
      "parents": [
        "bb45c188e13741b64a33b77ea5cb27372d1a846e"
      ],
      "author": {
        "name": "Dmitri Prime",
        "email": "bolms@google.com",
        "time": "Thu Dec 19 15:48:40 2024 -0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Dec 19 15:48:40 2024 -0800"
      },
      "message": "Add `alignas` specifier to buffer in explicit alignment test. (#216)\n\nAlso update workflow to emit test logs on failure."
    },
    {
      "commit": "bb45c188e13741b64a33b77ea5cb27372d1a846e",
      "tree": "103664464c39ec89a5bbf346df810cde9d3e4a9b",
      "parents": [
        "75bdc4ce3022d94ddb21d26cd1869bf430300a1b"
      ],
      "author": {
        "name": "Dmitri Prime",
        "email": "bolms@google.com",
        "time": "Wed Dec 18 15:09:31 2024 -0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Dec 18 15:09:31 2024 -0800"
      },
      "message": "Add docs for would-be contributors. (#213)\n\n"
    },
    {
      "commit": "75bdc4ce3022d94ddb21d26cd1869bf430300a1b",
      "tree": "829de3b3dc6bce18996e3db137e209e39093d116",
      "parents": [
        "35220b7b212cee75ffe56aecb87983398b0de7d8"
      ],
      "author": {
        "name": "Dmitri Prime",
        "email": "bolms@google.com",
        "time": "Wed Dec 18 13:51:24 2024 -0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Dec 18 13:51:24 2024 -0800"
      },
      "message": "Add error message for obscure case with parameters. (#214)\n\nPrior to this change, if a user omitted the length of an integer\r\nparameter *and* used that parameter as an argument to an operator or\r\nfunction, the compiler with throw an `AttributeError` instead of\r\nproviding a useful message.\r\n\r\nThis is because the check that integer runtime parameters have an\r\nexplicit size happened later than the function in `expression_bounds.py`\r\nthat tried to use the size.\r\n\r\nThis change moves the check earlier (incidentally spliting\r\n`check_constraints` into `check_constraints` and\r\n`check_early_constraints`), and also gives it a better error message."
    },
    {
      "commit": "35220b7b212cee75ffe56aecb87983398b0de7d8",
      "tree": "1354d4f4981d8ac35024b9ce7536a56b5602ef02",
      "parents": [
        "d7c0ba3b986cbe5a82a5a10a39ab9f733d410056"
      ],
      "author": {
        "name": "Dmitri Prime",
        "email": "bolms@google.com",
        "time": "Thu Dec 05 11:53:22 2024 -0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Dec 05 11:53:22 2024 -0800"
      },
      "message": "Fix tests under `bazel test -c opt`. (#212)\n\nWith certain versions of GCC, `bazel test -c opt ...` failed, apparently\r\ndue to a compiler bug.\r\n\r\nThis change:\r\n\r\n1.  Adds a workaround for the GCC bug.\r\n2.  Enables the workaround on versions of GCC known to have the bug.\r\n3.  Documents the bug (in comments).\r\n4.  Enables testing with `-c opt` as part of the commit hook.\r\n\r\nNote that the versions covered by #2 are a little wider than may be\r\ntechnically necessary.  As of the time of writing, this affects all\r\nreleased versions of GCC from 12.1 through 14.1, but the GCC fix has\r\nbeen backported to the 12.X and 13.X branches.  It may be possible\r\nto reduce the workaround\u0027s scope once those are released."
    },
    {
      "commit": "d7c0ba3b986cbe5a82a5a10a39ab9f733d410056",
      "tree": "88fc17a91c42864a037a922b376fd2e1d1bb5aee",
      "parents": [
        "73cbd989428d8c0a3f69601506fddd2b6332ecb1"
      ],
      "author": {
        "name": "Dmitri Prime",
        "email": "bolms@google.com",
        "time": "Wed Nov 20 15:30:47 2024 -0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Nov 20 15:30:47 2024 -0800"
      },
      "message": "Add test profiles that disable all `EMBOSS_CHECK`s. (#211)\n\nThis catches cases where C++ code inadvertently includes side effects\r\ninside of an `EMBOSS_CHECK`; the default `EMBOSS_CHECK` uses `assert`,\r\nwhich will be omitted when `NDEBUG` is defined."
    },
    {
      "commit": "73cbd989428d8c0a3f69601506fddd2b6332ecb1",
      "tree": "0fdb8eeaea1bfc49690a4d90bf0b077c2ff2b216",
      "parents": [
        "46423da28a23f1b03e6024f2ba6c0863d408349e"
      ],
      "author": {
        "name": "Dmitri Prime",
        "email": "bolms@google.com",
        "time": "Thu Oct 17 13:32:35 2024 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Oct 17 13:32:35 2024 -0700"
      },
      "message": "Convert Location to a namedtuple, and associated cleanup (#205)\n\nThis change makes the `Location` dataclass, which does not change\r\nfrequently, into a new `SourceLocation` namedtuple, and changes the\r\n`SourceLocation` serialization.  As a result, with this change:\r\n\r\n*   `embossc` runs about 25% faster on a large (7kLOC) input; `python3\r\n    -OO emboss` runs about 19% faster on the same input.\r\n*   Serialized IR is about 45% smaller.\r\n\r\nDetails:\r\n\r\n*   Replace the `ir_data.Location` dataclass with a new\r\n    `parser_types.SourceLocation` namedtuple.  The rename helps clarify\r\n    the difference between a location within source code\r\n    (`SourceLocation`) and a location within a structure\r\n    (`FieldLocation`).\r\n*   Similarly, replace `ir_data.Position` with\r\n    `parser_types.SourcePosition`.\r\n*   Update any place that edits a `SourceLocation` with an appropriate\r\n    assignment; e.g., `x.source_location.end \u003d y` becomes\r\n    `x.source_location \u003d x.source_location._replace(end\u003dy)`.  In most\r\n    cases, several fields were updated consecutively; those updates are\r\n    been merged.\r\n*   Update the JSON serialization to use the compact format.\r\n*   Replace `format_location()` and `format_position()` with\r\n    `__str__()` methods on `SourceLocation` and `SourcePosition`,\r\n    respectively.\r\n*   Replace `parse_location()` and `parse_position()` with `from_str()`\r\n    class methods on `SourceLocation` and `SourcePosition`,\r\n    respectively.\r\n*   Move the `make_location()` functionality into\r\n    `SourceLocation.__new__()`.\r\n*   Update `_to_dict` and `_from_dict` in `IrDataSerializer` to\r\n    stringify and destringify `SourceLocation`.  It is tempting to\r\n    try to do this during the JSON serialization step (with a `default\u003d`\r\n    parameter to `json.dumps` and an `object_hook\u003d` parameter to\r\n    `json.loads`), but it is tricky to get the `object_hook` to know\r\n    when to convert."
    },
    {
      "commit": "90018e61488c64c1ae5772902bd286709f45affc",
      "tree": "bec46eec7cd246b85f721e9c46d56a670c7b66af",
      "parents": [
        "1fc6f2415de1db54b98e192f8019082990d9eb47"
      ],
      "author": {
        "name": "Ben Olmstead",
        "email": "bolms@google.com",
        "time": "Fri Oct 11 23:04:50 2024 +0000"
      },
      "committer": {
        "name": "Ben Olmstead",
        "email": "bolms@google.com",
        "time": "Fri Oct 11 23:04:50 2024 +0000"
      },
      "message": "Fix mismerge.\n"
    },
    {
      "commit": "1fc6f2415de1db54b98e192f8019082990d9eb47",
      "tree": "817a1059b9ad5b5f879b80f1b0f1c6b50ea1e6ce",
      "parents": [
        "7b5f116c5c1d8a1e2337830cbb14ade09d0e5ab8"
      ],
      "author": {
        "name": "Ben Olmstead",
        "email": "bolms@google.com",
        "time": "Thu Oct 10 04:44:22 2024 +0000"
      },
      "committer": {
        "name": "Ben Olmstead",
        "email": "bolms@google.com",
        "time": "Fri Oct 11 23:03:21 2024 +0000"
      },
      "message": "Error example enumerator for Emboss.\n\nThis is a program that generates examples of erroneous parses, along\nwith some information about the potential errors, with the intention of\nallowing developers to quickly find out what states do *not* have\nassociated error messages.\n\nIdeally, this program would be used to check that there *are no* states\nthat are missing error messages, but actually adding all of those\nmessages is not feasible right now: at this change,\nenumerate_parse_errors finds 5808 states that are missing messages.\n"
    },
    {
      "commit": "7b5f116c5c1d8a1e2337830cbb14ade09d0e5ab8",
      "tree": "31ab29b339957b582da7a138d7502837719a0769",
      "parents": [
        "c8a1133b0dc6686b16a81fe041cfd177e9395d1b",
        "46423da28a23f1b03e6024f2ba6c0863d408349e"
      ],
      "author": {
        "name": "Dmitri Prime",
        "email": "bolms@google.com",
        "time": "Fri Oct 11 16:00:27 2024 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Oct 11 16:00:27 2024 -0700"
      },
      "message": "Merge branch \u0027master\u0027 into error_example_generator"
    },
    {
      "commit": "46423da28a23f1b03e6024f2ba6c0863d408349e",
      "tree": "ffeda4e35614720c2541e789ebe08798aadf3db6",
      "parents": [
        "bd276c4b44838fcfd4f3f3204cd67c4c2c051177"
      ],
      "author": {
        "name": "Dmitri Prime",
        "email": "bolms@google.com",
        "time": "Fri Oct 11 15:58:12 2024 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Oct 11 15:58:12 2024 -0700"
      },
      "message": "Emit a warning when the cached parser is not used. (#204)\n\nThis change checks to see if the cached parser was discarded due to a\r\nmismatch between the cached parser and the grammar specified in\r\nmodule_ir.py, and, if so, emits a warning that the cached parser was not\r\nused, along with informational messages on the nature of the mismatch.\r\n\r\nAdjusted the \"warning\" color from magenta to yellow.  (This is the first\r\nwarning in Emboss, so no magenta messages would have ever been emitted.)\r\n\r\nAdjusted the \"note\" color from \"bright black\" (dark grey) to \"white\"\r\n(light grey), becaused at least some terminals display \"bright black\"\r\nas just black."
    },
    {
      "commit": "bd276c4b44838fcfd4f3f3204cd67c4c2c051177",
      "tree": "d21c7c98287db57bde6a7978cfd3c6e1346fb213",
      "parents": [
        "96675c915ab9b295e2993d7511d7bd4f647093cc"
      ],
      "author": {
        "name": "Dmitri Prime",
        "email": "bolms@google.com",
        "time": "Fri Oct 11 12:59:21 2024 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Oct 11 12:59:21 2024 -0700"
      },
      "message": "Replace `WhichOneof(\"x\")` with `which_x`.  (#197)\n\nThis change refactors `OneOfField` so that all fields in a given `oneof`\r\nconstruct share the same backing attributes on their container class --\r\n`which_{oneof name}`, which holds the (string) name of the\r\ncurrently-active member of the oneof named `{oneof name}` (or `None` if\r\nno member is active), and `_value_{oneof name}`, which holds the value\r\nof the currently-active member (or `None`).\r\n\r\nThis avoids looping through field specs in order to do an update or to\r\nfigure out which member of a `oneof` is currently active.\r\n\r\nSince the `WhichOneof()` method is now a trivial read of a\r\nsimilarly-named attribute, it can be inlined for a small decrease in\r\noverall code size and without sacrificing readability.\r\n\r\nAs a result of these changes, the compiler now runs 4.5% faster on my\r\nlarge test `.emb`."
    },
    {
      "commit": "96675c915ab9b295e2993d7511d7bd4f647093cc",
      "tree": "4283320d6a9f1b8cb202c74fbe4016e46eca45f6",
      "parents": [
        "78901f985eb3a387ffb636a1bd35821cde995ae9"
      ],
      "author": {
        "name": "Dmitri Prime",
        "email": "bolms@google.com",
        "time": "Thu Oct 10 15:07:17 2024 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Oct 10 15:07:17 2024 -0700"
      },
      "message": "Fix test name. (#203)\n\n"
    },
    {
      "commit": "85ea44804ac23303b9c00761cc1809f4bfed51f2",
      "tree": "69597eb19f45a7aaa429ae5ba7bcadf1b518debf",
      "parents": [
        "0a6af2da702c10aa7036d1825a75d2d039c63aac",
        "78901f985eb3a387ffb636a1bd35821cde995ae9"
      ],
      "author": {
        "name": "Dmitri Prime",
        "email": "dmitri+github.com@xn13.com",
        "time": "Thu Oct 10 11:43:00 2024 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Oct 10 11:43:00 2024 -0700"
      },
      "message": "Merge branch \u0027google:master\u0027 into fix_includes\n"
    },
    {
      "commit": "78901f985eb3a387ffb636a1bd35821cde995ae9",
      "tree": "d9d566f1716c42c4a890022d72f3f7e8c3e2da07",
      "parents": [
        "42e85144f366f16cb611f5b10546bc8b34bc06d4"
      ],
      "author": {
        "name": "Dmitri Prime",
        "email": "bolms@google.com",
        "time": "Thu Oct 10 11:35:34 2024 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Oct 10 11:35:34 2024 -0700"
      },
      "message": "Cache the generated parser tables as a .py file (#196)\n\nThis change adds a checked in, cached copy of the parser tables,\r\nwhich will normally be used instead of generating a fresh set of\r\ntables.  On my machine, this saves approximately 2.05s on first\r\nrun of `embossc`, and 4.96s after `.pyc` files have been generated.\r\n\r\nFor a small `.emb` file, those savings translate to approximately 36%\r\nand 87% of the current total runtime, respectively.\r\n\r\nIn order to minimize frustrating cache decoherence problems, there are\r\ntwo additional features:\r\n\r\n*   When loading the cached parser, the set of grammar productions that\r\n    were used to generate the cached parser is compared to the current\r\n    set.  If they do not match, the cached parser is ignored, and a\r\n    fresh parser is generated.  This allows developers to work on\r\n    `module_ir.py` without manually regenerating the parser tables on\r\n    every change.\r\n*   The new `cached_parser_is_up_to_date_test` will fail if the cached\r\n    parser text is not an *exact* match for the text that would be\r\n    generated from a fresh run of `generate_cached_parser`.  This\r\n    ensures that the version of `cached_parser.py` that is in the\r\n    master Emboss repo is always up to date, no matter what might have\r\n    changed in the source tree."
    },
    {
      "commit": "42e85144f366f16cb611f5b10546bc8b34bc06d4",
      "tree": "6e451cd9c2a99aca2f067e19c5d6cbf14b6e7889",
      "parents": [
        "3817c7804e99d7c366397dd4aa493b5c7fd46f69",
        "1a8f852c54c2dddd0ac34779a184779e4e2ab5a7"
      ],
      "author": {
        "name": "Rob Russell",
        "email": "robrussell@users.noreply.github.com",
        "time": "Thu Oct 10 11:08:16 2024 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Oct 10 11:08:16 2024 -0700"
      },
      "message": "Merge pull request #182 from reventlov/pylint_misc_harmless\n\nFix miscellaneous harmless lints."
    },
    {
      "commit": "c8a1133b0dc6686b16a81fe041cfd177e9395d1b",
      "tree": "c708e830815ecf33c3300e20beb43b64aa7dd7d0",
      "parents": [
        "06f35cf9516409a5103a7cd39c52cc44a20d0115"
      ],
      "author": {
        "name": "Ben Olmstead",
        "email": "bolms@google.com",
        "time": "Thu Oct 10 04:48:35 2024 +0000"
      },
      "committer": {
        "name": "Ben Olmstead",
        "email": "bolms@google.com",
        "time": "Thu Oct 10 04:48:35 2024 +0000"
      },
      "message": "Reformat with Black.\n"
    },
    {
      "commit": "06f35cf9516409a5103a7cd39c52cc44a20d0115",
      "tree": "461e881f0ec55206cf98acb3dd9199468feaa0f6",
      "parents": [
        "886cfbb659401db1c6911493f264c6586a37f5c8"
      ],
      "author": {
        "name": "Ben Olmstead",
        "email": "bolms@google.com",
        "time": "Thu Oct 10 04:44:22 2024 +0000"
      },
      "committer": {
        "name": "Ben Olmstead",
        "email": "bolms@google.com",
        "time": "Thu Oct 10 04:44:22 2024 +0000"
      },
      "message": "Error example enumerator for Emboss.\n\nThis is a program that generates examples of erroneous parses, along\nwith some information about the potential errors, with the intention of\nallowing developers to quickly find out what states do *not* have\nassociated error messages.\n\nIdeally, this program would be used to check that there *are no* states\nthat are missing error messages, but actually adding all of those\nmessages is not feasible right now: at this change,\nenumerate_parse_errors finds 5808 states that are missing messages.\n"
    },
    {
      "commit": "3817c7804e99d7c366397dd4aa493b5c7fd46f69",
      "tree": "b9c1f0523fcd2e696675ff4629db434e1d94443b",
      "parents": [
        "8b25b90e5633b899c7ccd097bd4678cfa92bfe13"
      ],
      "author": {
        "name": "Dmitri Prime",
        "email": "bolms@google.com",
        "time": "Wed Oct 09 17:47:12 2024 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Oct 09 17:47:12 2024 -0700"
      },
      "message": "Add a page of useful links for developers. (#199)\n\n"
    },
    {
      "commit": "8b25b90e5633b899c7ccd097bd4678cfa92bfe13",
      "tree": "e5a83704b90bbfa21f1b5ed36f66f632ea8fef0a",
      "parents": [
        "cefa72619fe9877a7d6c5013f9b453edb1eaa85f",
        "9af089c572d3f028733558c403eab0361bfef57c"
      ],
      "author": {
        "name": "Rob Russell",
        "email": "robrussell@users.noreply.github.com",
        "time": "Wed Oct 09 15:59:58 2024 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Oct 09 15:59:58 2024 -0700"
      },
      "message": "Merge pull request #200 from reventlov/debug_stop_after_step\n\nAdd `--debug-stop-before-step` flag."
    },
    {
      "commit": "9af089c572d3f028733558c403eab0361bfef57c",
      "tree": "e747c80d31d887319fc89bb9dac11bbc73e792af",
      "parents": [
        "6ddf2f3ecf8478306c330ab9d7731b5e33cc61b7"
      ],
      "author": {
        "name": "Ben Olmstead",
        "email": "bolms@google.com",
        "time": "Wed Oct 09 22:47:22 2024 +0000"
      },
      "committer": {
        "name": "Ben Olmstead",
        "email": "bolms@google.com",
        "time": "Wed Oct 09 22:47:22 2024 +0000"
      },
      "message": "Fix the front end if no `--debug-stop-before-step` flag is passed.\n"
    },
    {
      "commit": "6ddf2f3ecf8478306c330ab9d7731b5e33cc61b7",
      "tree": "076e5962b1225026eaa5ae7147c85926c6ff1664",
      "parents": [
        "97cf1a2beab96f32a5805506c11d5ecf884b7955"
      ],
      "author": {
        "name": "Ben Olmstead",
        "email": "bolms@google.com",
        "time": "Wed Oct 09 21:48:57 2024 +0000"
      },
      "committer": {
        "name": "Ben Olmstead",
        "email": "bolms@google.com",
        "time": "Wed Oct 09 21:48:57 2024 +0000"
      },
      "message": "Remove debug prints.\n"
    },
    {
      "commit": "97cf1a2beab96f32a5805506c11d5ecf884b7955",
      "tree": "55f3f3d2257dde7af66ad5381d9de4998ec37748",
      "parents": [
        "0dc1f8d1dc6f77e46f0a1bffcaa97f2c561fbcae"
      ],
      "author": {
        "name": "Ben Olmstead",
        "email": "bolms@google.com",
        "time": "Wed Oct 09 21:47:38 2024 +0000"
      },
      "committer": {
        "name": "Ben Olmstead",
        "email": "bolms@google.com",
        "time": "Wed Oct 09 21:47:38 2024 +0000"
      },
      "message": "Format with Black.\n"
    },
    {
      "commit": "0dc1f8d1dc6f77e46f0a1bffcaa97f2c561fbcae",
      "tree": "742904e294991324a4d582e4f0b04d07c76b1deb",
      "parents": [
        "731f3d12a30536523bfff18b62f6f752ee03e40f"
      ],
      "author": {
        "name": "Ben Olmstead",
        "email": "bolms@google.com",
        "time": "Wed Oct 09 21:24:31 2024 +0000"
      },
      "committer": {
        "name": "Ben Olmstead",
        "email": "bolms@google.com",
        "time": "Wed Oct 09 21:24:31 2024 +0000"
      },
      "message": "Add `--debug-stop-after-step` flag.\n\nThis exposes the existing `stop_after_step` functionality that is used\nin unit tests through the command line, which allows the IR to be\ninspected/analyzed.\n"
    },
    {
      "commit": "cefa72619fe9877a7d6c5013f9b453edb1eaa85f",
      "tree": "34c0a8bcce41a7f014dc43210a3a83c997a2389c",
      "parents": [
        "886cfbb659401db1c6911493f264c6586a37f5c8"
      ],
      "author": {
        "name": "Dmitri Prime",
        "email": "bolms@google.com",
        "time": "Mon Oct 07 12:20:42 2024 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Oct 07 12:20:42 2024 -0700"
      },
      "message": "Move `docs_are_up_to_date_test.py` fix instructions into asserts (#198)\n\n"
    },
    {
      "commit": "886cfbb659401db1c6911493f264c6586a37f5c8",
      "tree": "4fa66858d8c1300b4201c9119ff259df062887c8",
      "parents": [
        "9b6907bc28bfc14f3f97566a8366b4483f2eebd4"
      ],
      "author": {
        "name": "Dmitri Prime",
        "email": "bolms@google.com",
        "time": "Wed Oct 02 09:16:28 2024 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Oct 02 09:16:28 2024 -0700"
      },
      "message": "Restructure ACTION and GOTO tables. (#194)\n\nWith this change, the `Parser.action` and `.goto` tables are now 2-layer\r\nhash tables, using states as the keys for the outer tables and symbols\r\nas the keys for the inner tables.  Functionally, this means that\r\n`action[state, symbol]` becomes `action[state][symbol]`, and likewise\r\nfor `goto`.\r\n\r\nThis also allows the `expected` table to be eliminated, as it can be\r\nquickly computed from `action[state]` when needed."
    },
    {
      "commit": "9b6907bc28bfc14f3f97566a8366b4483f2eebd4",
      "tree": "ed64b14a992bc276590112ad7a6a38a0b5497ff3",
      "parents": [
        "b519a41b995d05e7219e8cb2f4615ceca1b3738c"
      ],
      "author": {
        "name": "Dmitri Prime",
        "email": "bolms@google.com",
        "time": "Mon Sep 30 15:54:59 2024 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Sep 30 15:54:59 2024 -0700"
      },
      "message": "Bit shift design sketch (#190)\n\nDesign sketch for bit shift operators."
    },
    {
      "commit": "b519a41b995d05e7219e8cb2f4615ceca1b3738c",
      "tree": "62d0075eb8a149074d578c70b55fd409fde8e4c3",
      "parents": [
        "e9cc3ad705ed0b03dad0516eb4111537d4d25148"
      ],
      "author": {
        "name": "Dmitri Prime",
        "email": "bolms@google.com",
        "time": "Thu Sep 26 14:34:27 2024 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Sep 26 14:34:27 2024 -0700"
      },
      "message": "Fix typos. (#179)\n\n"
    },
    {
      "commit": "e9cc3ad705ed0b03dad0516eb4111537d4d25148",
      "tree": "193b37e2e4e1b80c34d64805e038e38977ae049f",
      "parents": [
        "6faad3e223aac6f9da7d1b259ff801a93741bafb"
      ],
      "author": {
        "name": "Dmitri Prime",
        "email": "bolms@google.com",
        "time": "Fri Sep 20 12:01:27 2024 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Sep 20 12:01:27 2024 -0700"
      },
      "message": "Fix section links in reference docs. (#188)\n\n"
    },
    {
      "commit": "6faad3e223aac6f9da7d1b259ff801a93741bafb",
      "tree": "43e6139ea62f99794b9cadd04d62984212f17b6b",
      "parents": [
        "800bd4a58f91ecf006e97688ac4a5df96ef560e4",
        "467c678f112bc287ea418740cfb2c9ab95e72ddc"
      ],
      "author": {
        "name": "Rob Russell",
        "email": "robrussell@users.noreply.github.com",
        "time": "Fri Sep 20 11:55:05 2024 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Sep 20 11:55:05 2024 -0700"
      },
      "message": "Merge pull request #184 from reventlov/re_fullmatch\n\nUse `re.fullmatch` instead of `re.match`."
    },
    {
      "commit": "467c678f112bc287ea418740cfb2c9ab95e72ddc",
      "tree": "43e6139ea62f99794b9cadd04d62984212f17b6b",
      "parents": [
        "02a08ab9b7486ceaf7ca4fc0ac95131f2bee62db",
        "800bd4a58f91ecf006e97688ac4a5df96ef560e4"
      ],
      "author": {
        "name": "Rob Russell",
        "email": "robrussell@users.noreply.github.com",
        "time": "Fri Sep 20 11:37:32 2024 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Sep 20 11:37:32 2024 -0700"
      },
      "message": "Merge branch \u0027master\u0027 into re_fullmatch"
    },
    {
      "commit": "800bd4a58f91ecf006e97688ac4a5df96ef560e4",
      "tree": "67fde6c28063661ece9bc37179e77e5000fcd47f",
      "parents": [
        "b545db0453894b66896e0432687ce8c7abea4f38"
      ],
      "author": {
        "name": "Dmitri Prime",
        "email": "bolms@google.com",
        "time": "Fri Sep 20 10:19:16 2024 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Sep 20 10:19:16 2024 -0700"
      },
      "message": "Fix docstring lints as reported by internal linter. (#180)\n\n"
    },
    {
      "commit": "b545db0453894b66896e0432687ce8c7abea4f38",
      "tree": "cb759939cb910c760c9b8646542f10ba77bfc270",
      "parents": [
        "cffcf47c39f83332c55efd0b8ad1216c8f28f8ec"
      ],
      "author": {
        "name": "Dmitri Prime",
        "email": "bolms@google.com",
        "time": "Thu Sep 19 15:00:13 2024 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Sep 19 15:00:13 2024 -0700"
      },
      "message": "Fix minor type annotation lints. (#183)\n\n"
    },
    {
      "commit": "cffcf47c39f83332c55efd0b8ad1216c8f28f8ec",
      "tree": "5c4321f6cf96de1bf2a2161c120ecb0c06ec7d8b",
      "parents": [
        "731f3d12a30536523bfff18b62f6f752ee03e40f"
      ],
      "author": {
        "name": "Dmitri Prime",
        "email": "bolms@google.com",
        "time": "Thu Sep 19 14:59:50 2024 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Sep 19 14:59:50 2024 -0700"
      },
      "message": "Replace various `assert*()` calls with more specific ones. (#181)\n\n* Replace various `assert*()` calls with more specific ones.\r\n\r\n* Replace various `assert*()` calls with more specific ones."
    },
    {
      "commit": "731f3d12a30536523bfff18b62f6f752ee03e40f",
      "tree": "dcb5024ea8c2a7e584e8339b1c9d4aeefc245ea1",
      "parents": [
        "fa103b7dde8e0638bb8839e1f56f0095fd4fc3b9"
      ],
      "author": {
        "name": "Eric Rahm",
        "email": "erahm@google.com",
        "time": "Thu Sep 12 10:36:10 2024 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Sep 12 10:36:10 2024 -0700"
      },
      "message": "Cast to ValueType before ValueIsOk check (#186)\n\nThis allows using a larger backing value type to assign a UInt or Int\r\nvalue when the value itself fits within the range of the internal value\r\ntype. Previously this would fail to compile if `-Wshorten-64-to-32` was\r\nspecified when building with `clang`:\r\n\r\n```\r\nUIntView\u003cFixedSizeViewParameters\u003c16, AllValuesAreOk\u003e\u003e view;\r\nsize_t value \u003d 200;\r\nview.TryToWrite(value);\r\n```\r\n\r\nFixes #185"
    },
    {
      "commit": "0a6af2da702c10aa7036d1825a75d2d039c63aac",
      "tree": "4f159583c1f80703c9d7f9f14ecb12226ed698fc",
      "parents": [
        "02a08ab9b7486ceaf7ca4fc0ac95131f2bee62db"
      ],
      "author": {
        "name": "Ben Olmstead",
        "email": "bolms@google.com",
        "time": "Mon Sep 09 22:23:10 2024 +0000"
      },
      "committer": {
        "name": "Ben Olmstead",
        "email": "bolms@google.com",
        "time": "Mon Sep 09 22:23:10 2024 +0000"
      },
      "message": "Remove unused `#include` statements; add missing `#include` statements.\n"
    },
    {
      "commit": "02a08ab9b7486ceaf7ca4fc0ac95131f2bee62db",
      "tree": "b31b32cc5f3e31a7d7af488b7200408ef2e2248d",
      "parents": [
        "fa103b7dde8e0638bb8839e1f56f0095fd4fc3b9"
      ],
      "author": {
        "name": "Ben Olmstead",
        "email": "bolms@google.com",
        "time": "Mon Sep 09 22:12:54 2024 +0000"
      },
      "committer": {
        "name": "Ben Olmstead",
        "email": "bolms@google.com",
        "time": "Mon Sep 09 22:12:54 2024 +0000"
      },
      "message": "Use `re.fullmatch` instead of `re.match`.\n"
    },
    {
      "commit": "1a8f852c54c2dddd0ac34779a184779e4e2ab5a7",
      "tree": "765f1d1ce2355589d0db8975354e1262e9a4352c",
      "parents": [
        "b854a1c0b5b92ea903508ec36a8cadfed475922e"
      ],
      "author": {
        "name": "Ben Olmstead",
        "email": "bolms@google.com",
        "time": "Mon Sep 09 20:13:26 2024 +0000"
      },
      "committer": {
        "name": "Ben Olmstead",
        "email": "bolms@google.com",
        "time": "Mon Sep 09 20:13:26 2024 +0000"
      },
      "message": "Fix miscellaneous harmless lints.\n"
    }
  ],
  "next": "b854a1c0b5b92ea903508ec36a8cadfed475922e"
}
