)]}'
{
  "commit": "5b3812671124153698c840422fafaf25545bfb1e",
  "tree": "da3ff1232be10508a4c8c0068d50e840d1a5c99d",
  "parents": [
    "053bd6c7203364ae6f796d71414a4dcf4672bd89"
  ],
  "author": {
    "name": "Dmitri Prime",
    "email": "bolms@google.com",
    "time": "Mon May 01 23:55:07 2023 -0700"
  },
  "committer": {
    "name": "GitHub",
    "email": "noreply@github.com",
    "time": "Mon May 01 23:55:07 2023 -0700"
  },
  "message": "Factor back-end attribute checking into the back end. (#80)\n\nFactor back-end attribute checking into the back end.\r\n\r\nThis change splits up `front_end/attribute_checker.py`, moving the\r\ngeneric parts to a new file `util/attribute_util.py`, and moving the\r\nback-end-specific parts to `back_end/cpp/header_generator.py`.\r\n\r\nSome tests from `front_end/attribute_checker_test.py` were moved to\r\na new test suite, `header_generator_test.py`.  There should probably\r\nbe a `util/attribute_checker_test.py`, but for now the old tests\r\nprovide sufficient coverage.\r\n\r\nAs a result of moving some attribute checking into the back end,\r\n`generate_header()` can now return errors.  A future change should\r\nconvert some of the `assert` statements in the same file into error\r\nreturns.\r\n\r\nIn order for the `emboss_codegen_cpp.py` driver to properly display\r\nerrors, the original source code of the `.emb` is now included\r\nverbatim in the IR, increasing the IR size by about 3%.\r\n\r\nThis change does still enforce some minimal checking of back end\r\nattributes: the back end must be listed in the new\r\n`[expected_back_ends]` attribute (default value `\"cpp\"`), or it is\r\nconsidered to be an error.  This change does not document the\r\n`[expected_back_ends]` attribute because it is not currently useful for\r\nend users.",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "c9e879c0ba9aec0c1f2aa98879384a6e9e2572a8",
      "old_mode": 33188,
      "old_path": "compiler/back_end/cpp/BUILD",
      "new_id": "2280c368813be5f2094596440a67aa56d8c8ab30",
      "new_mode": 33188,
      "new_path": "compiler/back_end/cpp/BUILD"
    },
    {
      "type": "modify",
      "old_id": "73a1450c6f501c9e2c0976056fa349eea3c3b778",
      "old_mode": 33188,
      "old_path": "compiler/back_end/cpp/emboss_codegen_cpp.py",
      "new_id": "77bcb84ad273e26ade52880565840d6b291cfc2a",
      "new_mode": 33188,
      "new_path": "compiler/back_end/cpp/emboss_codegen_cpp.py"
    },
    {
      "type": "modify",
      "old_id": "4fc78900b4f9168c752a596b83b14c22ac8156eb",
      "old_mode": 33188,
      "old_path": "compiler/back_end/cpp/header_generator.py",
      "new_id": "e467284c6ca5bb2cf92d842ed3eb3286c7562345",
      "new_mode": 33188,
      "new_path": "compiler/back_end/cpp/header_generator.py"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "e057c0d4c3c072ed7a023d4ced215eeb42457a75",
      "new_mode": 33188,
      "new_path": "compiler/back_end/cpp/header_generator_test.py"
    },
    {
      "type": "modify",
      "old_id": "14a4696ac62a49e2e29c03f670379295c7bccb0b",
      "old_mode": 33188,
      "old_path": "compiler/front_end/BUILD",
      "new_id": "f8d8484f385c8d8fd6cf864fe7481aeb8f98de6e",
      "new_mode": 33188,
      "new_path": "compiler/front_end/BUILD"
    },
    {
      "type": "modify",
      "old_id": "27e6722cc489414733ce9add79e0aa1d3ab79b1c",
      "old_mode": 33188,
      "old_path": "compiler/front_end/attribute_checker.py",
      "new_id": "21c6b22692af199dac1c786c08a856687d92838a",
      "new_mode": 33188,
      "new_path": "compiler/front_end/attribute_checker.py"
    },
    {
      "type": "modify",
      "old_id": "efae0e668d6e6772ab8998657d0b5433ecb65c51",
      "old_mode": 33188,
      "old_path": "compiler/front_end/attribute_checker_test.py",
      "new_id": "def86c668fcea9814a5cf7d5d529e0f4eca6d84b",
      "new_mode": 33188,
      "new_path": "compiler/front_end/attribute_checker_test.py"
    },
    {
      "type": "modify",
      "old_id": "f931f5b544c4f2f29f7e604d8241f736650eb09a",
      "old_mode": 33188,
      "old_path": "compiler/front_end/attributes.py",
      "new_id": "e4561da023f994017d1c3d9c6c3beaf2d3bf398c",
      "new_mode": 33188,
      "new_path": "compiler/front_end/attributes.py"
    },
    {
      "type": "modify",
      "old_id": "ed435c2a6af4f8a01ab9d8e427c33cc3531e90e4",
      "old_mode": 33188,
      "old_path": "compiler/front_end/emboss_front_end.py",
      "new_id": "6388128cba0532f3e473bcd8a312094de1725bb9",
      "new_mode": 33188,
      "new_path": "compiler/front_end/emboss_front_end.py"
    },
    {
      "type": "modify",
      "old_id": "261027dfed332464cb81cc225e111132ec1abc64",
      "old_mode": 33188,
      "old_path": "compiler/front_end/glue.py",
      "new_id": "c19385d080fc4298102e01569bbcb5a65f561130",
      "new_mode": 33188,
      "new_path": "compiler/front_end/glue.py"
    },
    {
      "type": "modify",
      "old_id": "0bbd46cd8a74a1e43f1fc9e2ba8dfc1c44fa1bb8",
      "old_mode": 33188,
      "old_path": "compiler/front_end/module_ir_test.py",
      "new_id": "170088839582706b3922837796d4684e6887e268",
      "new_mode": 33188,
      "new_path": "compiler/front_end/module_ir_test.py"
    },
    {
      "type": "modify",
      "old_id": "92f4cde2aed7bb4c09038b140bf843aa9fde6dd4",
      "old_mode": 33188,
      "old_path": "compiler/util/BUILD",
      "new_id": "c9ec1289aa3a89f83cd769170489626f301641eb",
      "new_mode": 33188,
      "new_path": "compiler/util/BUILD"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "80387bc011f2860ccb72701778d95d3bf7cf954a",
      "new_mode": 33188,
      "new_path": "compiler/util/attribute_util.py"
    },
    {
      "type": "modify",
      "old_id": "e1753493dbc88e3a1a8e4d63436aecdba7a55fac",
      "old_mode": 33188,
      "old_path": "compiler/util/ir_pb2.py",
      "new_id": "ef081bca3dfb079951bc5b6f88c37f48b6a540f8",
      "new_mode": 33188,
      "new_path": "compiler/util/ir_pb2.py"
    },
    {
      "type": "modify",
      "old_id": "942b49a3d8660f94233da4e069b47fd0d1f750f7",
      "old_mode": 33188,
      "old_path": "testdata/golden/span_se_log_file_status.ir.txt",
      "new_id": "b1bfef826d6af2d06d8e42500ef9ee2858ff8774",
      "new_mode": 33188,
      "new_path": "testdata/golden/span_se_log_file_status.ir.txt"
    }
  ]
}
