)]}'
{
  "commit": "4000cd09f2e29da4ef154392e0499caa5c1347f5",
  "tree": "9fe2a8655a617aafdc790405929585492b089d12",
  "parents": [
    "47888ad0aeb367a7e1a76a88dd8dbeb120e293a6"
  ],
  "author": {
    "name": "reventlov",
    "email": "dmitri+github.com@xn13.com",
    "time": "Tue Apr 05 12:15:39 2022 -0700"
  },
  "committer": {
    "name": "reventlov",
    "email": "dmitri+github.com@xn13.com",
    "time": "Tue Apr 05 12:15:39 2022 -0700"
  },
  "message": "Implement the `$next` keyword for convenient packed structures.\n\nThis change adds a new keyword, `$next`, which may be used in the offset\nexpression of a physical field, and which translates to \"the offset of\nthe first byte after the end of the syntactically previous physical\nfield.\"\n\nEssentially, it allows `struct`s or `bits` like:\n\n    struct Foo:\n      0     [+4]  UInt  a\n      $next [+2]  UInt  b\n      $next [+1]  UInt  c\n      $next [+4]  UInt  d\n\n... where each field is packed directly after the previous one.  See the\nupdated documentation in `doc/language-reference.md` for details.\n\nThis also contains a few incidental changes:\n\n*   A new function in `ir_util`, for scanning subtrees of the IR.  Note\n    that a similar function used to exist; this is really a resurrection\n    of that functionality.\n*   `synthetics.synthesize_fields` has been renamed to\n    `synthetics.desugar`, since it now does more than just synthesize\n    fields.\n*   The \"how to use the Emboss compiler\" sections of `guide.md` have been\n    expanded.\n*   The comment in `compiler/front_end/docs_are_up_to_date_test.py` has\n    been updated with the correct paths for the open-source Emboss.\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "52840f12d5b250a3b87a2f11bfafad30a86d1545",
      "old_mode": 33188,
      "old_path": "compiler/back_end/cpp/BUILD",
      "new_id": "fe532a1ac9c77b504ba41a5b5f580f79e0a21701",
      "new_mode": 33188,
      "new_path": "compiler/back_end/cpp/BUILD"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "c4990f45030ffb99a3efb75f2ac6376909f79e26",
      "new_mode": 33188,
      "new_path": "compiler/back_end/cpp/testcode/next_keyword_test.cc"
    },
    {
      "type": "modify",
      "old_id": "3cc6251cf9be6d196691ec1da50fb6b9661a3965",
      "old_mode": 33188,
      "old_path": "compiler/front_end/dependency_checker.py",
      "new_id": "fa2d719897d3bc72c6d9b9bd78b5f1c687394c2a",
      "new_mode": 33188,
      "new_path": "compiler/front_end/dependency_checker.py"
    },
    {
      "type": "modify",
      "old_id": "d103d174dc5126eb1c86602c33dc52ff097e569b",
      "old_mode": 33188,
      "old_path": "compiler/front_end/docs_are_up_to_date_test.py",
      "new_id": "70fd4b37fcbf84f3bcac4067c0a630c3d925fc6c",
      "new_mode": 33188,
      "new_path": "compiler/front_end/docs_are_up_to_date_test.py"
    },
    {
      "type": "modify",
      "old_id": "3ddd20e46a2282d125773a15e7370b07fca83823",
      "old_mode": 33188,
      "old_path": "compiler/front_end/format_emb.py",
      "new_id": "ce5d16b44570da59a75bbac31ed7379ac31cbb4e",
      "new_mode": 33188,
      "new_path": "compiler/front_end/format_emb.py"
    },
    {
      "type": "modify",
      "old_id": "2d96a894998fb6d29b7faa612a216661bb2cd0ea",
      "old_mode": 33188,
      "old_path": "compiler/front_end/glue.py",
      "new_id": "261027dfed332464cb81cc225e111132ec1abc64",
      "new_mode": 33188,
      "new_path": "compiler/front_end/glue.py"
    },
    {
      "type": "modify",
      "old_id": "aea005c94bbedd37f496b39acd333e2dc527292c",
      "old_mode": 33188,
      "old_path": "compiler/front_end/module_ir.py",
      "new_id": "15312cfc25b0be859f7ae0d82b331cbc8543f1d3",
      "new_mode": 33188,
      "new_path": "compiler/front_end/module_ir.py"
    },
    {
      "type": "modify",
      "old_id": "c9249b482a5362422bd95b6c5f648792b99abb50",
      "old_mode": 33188,
      "old_path": "compiler/front_end/module_ir_test.py",
      "new_id": "0bbd46cd8a74a1e43f1fc9e2ba8dfc1c44fa1bb8",
      "new_mode": 33188,
      "new_path": "compiler/front_end/module_ir_test.py"
    },
    {
      "type": "modify",
      "old_id": "a2296e300deae3d1c5beeb9f7b47b1945803adca",
      "old_mode": 33188,
      "old_path": "compiler/front_end/synthetics.py",
      "new_id": "aebc7e50ae729783eaa98e3f5ded97b2b65120d4",
      "new_mode": 33188,
      "new_path": "compiler/front_end/synthetics.py"
    },
    {
      "type": "modify",
      "old_id": "3d3f9a576d73179f70c94099250dde4ca8fd323f",
      "old_mode": 33188,
      "old_path": "compiler/front_end/synthetics_test.py",
      "new_id": "904b6cfc4bf9d50e381e99da4deaaf3eccfc41a0",
      "new_mode": 33188,
      "new_path": "compiler/front_end/synthetics_test.py"
    },
    {
      "type": "modify",
      "old_id": "42623711ed3e685ca2178e51eef77b5c2af26662",
      "old_mode": 33188,
      "old_path": "compiler/front_end/tokenizer.py",
      "new_id": "752371f88195226da9299b0accadc310711904bc",
      "new_mode": 33188,
      "new_path": "compiler/front_end/tokenizer.py"
    },
    {
      "type": "modify",
      "old_id": "f0c10d09db34b5f254914f27d50312283dea82a0",
      "old_mode": 33188,
      "old_path": "compiler/util/traverse_ir.py",
      "new_id": "ce2c94f7e990a8618485daa626ea14e6426c3d06",
      "new_mode": 33188,
      "new_path": "compiler/util/traverse_ir.py"
    },
    {
      "type": "rename",
      "old_id": "77ae16eefef0fe7f8923c67195ee9a0d3ad66014",
      "old_mode": 33188,
      "old_path": "doc/design_docs/field_packing_notation.md",
      "new_id": "2f4c554a878c9ec53cb2074341ee95139cebd058",
      "new_mode": 33188,
      "new_path": "doc/design_docs/archive/next_keyword.md",
      "score": 95
    },
    {
      "type": "modify",
      "old_id": "7bc99fa120219a7e372558d1cfff25b9fd98bc79",
      "old_mode": 33188,
      "old_path": "doc/grammar.md",
      "new_id": "a53abe6b8676d38560f446e81e2e33e6463246f0",
      "new_mode": 33188,
      "new_path": "doc/grammar.md"
    },
    {
      "type": "modify",
      "old_id": "d52ebd5faabd2b3c484b933ab5324a891faa91b5",
      "old_mode": 33188,
      "old_path": "doc/guide.md",
      "new_id": "a0b0b7a32284b069f40bd07d2c999f5723cae39d",
      "new_mode": 33188,
      "new_path": "doc/guide.md"
    },
    {
      "type": "modify",
      "old_id": "3a07bce8e68c9a8210c44662d3772ebd113fffa6",
      "old_mode": 33188,
      "old_path": "doc/language-reference.md",
      "new_id": "6084421536dda26f1531e2dd62f9573bf98d3e4c",
      "new_mode": 33188,
      "new_path": "doc/language-reference.md"
    },
    {
      "type": "modify",
      "old_id": "1791d66fd6a1ddcf4ec8b8ace2d1c10553b087e4",
      "old_mode": 33188,
      "old_path": "testdata/BUILD",
      "new_id": "9c68b2273912ef1057d7fbd1f9d5447d80a6c834",
      "new_mode": 33188,
      "new_path": "testdata/BUILD"
    },
    {
      "type": "modify",
      "old_id": "2a1ccac58164b266ba4093f1f941d9da33fccaa0",
      "old_mode": 33188,
      "old_path": "testdata/format/fields_aligned.emb",
      "new_id": "2a824852d2de985b7c7107487ef7e423c7b36579",
      "new_mode": 33188,
      "new_path": "testdata/format/fields_aligned.emb"
    },
    {
      "type": "modify",
      "old_id": "ae2f28e3984bed022126f25003a9157cc8b3c247",
      "old_mode": 33188,
      "old_path": "testdata/format/fields_aligned.emb.formatted",
      "new_id": "d907b28c907d1bfb465b994e7f608b5f50bcc906",
      "new_mode": 33188,
      "new_path": "testdata/format/fields_aligned.emb.formatted"
    },
    {
      "type": "modify",
      "old_id": "fd14ce27550e72de0131ef35f20c3abe98c30766",
      "old_mode": 33188,
      "old_path": "testdata/format/fields_aligned.emb.formatted_indent_4",
      "new_id": "814335f786779539b0d38367e2f1150f89518e8f",
      "new_mode": 33188,
      "new_path": "testdata/format/fields_aligned.emb.formatted_indent_4"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "7c0a91ac3bd11a4f3340591e6a3e45868c75cf0f",
      "new_mode": 33188,
      "new_path": "testdata/next_keyword.emb"
    }
  ]
}
