)]}'
{
  "commit": "cab4f273bf4411d9495f812a178f2e7103f081aa",
  "tree": "c9daf14daa02a957893c6f8d67da4974b0932d64",
  "parents": [
    "4471b81a0a0b94c75bad6e81d0413860944ecb1f"
  ],
  "author": {
    "name": "Thomas Lively",
    "email": "tlively@google.com",
    "time": "Sat Jan 21 01:42:14 2023"
  },
  "committer": {
    "name": "Thomas Lively",
    "email": "tlively@google.com",
    "time": "Sat Jan 21 01:42:14 2023"
  },
  "message": "[NFC] Experiment with C++20 coroutines for expression traversal\n\nAdd a gtest file that is only included in the build when using C++20 or greater\nthat defines a generator utility in terms of C++20 coroutines and then uses that\nto define generators for traversing Expressions. Unlike our current traversal\nutilities, these generators leave control flow up to their callers, making it\ntrivial to do things like stop the traversal early or run multiple traversals\nconcurrently, for example to compare two expression trees.\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "21b7ad4adfd70d87369d5668a63e1a279dfd1e0b",
      "old_mode": 33188,
      "old_path": "test/gtest/CMakeLists.txt",
      "new_id": "6daac12b116ed624d044b5bb2e36e1317c1612b6",
      "new_mode": 33188,
      "new_path": "test/gtest/CMakeLists.txt"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "3e991a0fdd2967ee868f6c805e209c31f9348f9a",
      "new_mode": 33188,
      "new_path": "test/gtest/coro.cpp"
    }
  ]
}
