)]}'
{
  "commit": "28b7b6c507eb808567e3aea446cd259f7691fddc",
  "tree": "8fadad30418dbd95ac7a716bd49f0f9ac582443b",
  "parents": [
    "41fef642de70ecdcaaa26be96d56a0398f95abd4"
  ],
  "author": {
    "name": "David \u0027Digit\u0027 Turner",
    "email": "digit@google.com",
    "time": "Tue Apr 04 00:09:45 2023 +0200"
  },
  "committer": {
    "name": "GN LUCI",
    "email": "gn-scoped@luci-project-accounts.iam.gserviceaccount.com",
    "time": "Wed Apr 05 13:11:50 2023 +0000"
  },
  "message": "Support defined(foo[\"bar\"]) syntax.\n\nSince it is already possible to use a string subscript to\nget the value of a scope member (i.e. foo[\"bar\"] being the\nsame as foo.bar, but [] allowing expression evaluation),\nthis ensures that `defined(foo[\"bar\"])` works as `defined(foo.bar)`\nas well.\n\nBug: 328\nChange-Id: I41c069b3e782745765f85aa0c1a6f7ac75f43c82\nReviewed-on: https://gn-review.googlesource.com/c/gn/+/15200\nCommit-Queue: David Turner \u003cdigit@google.com\u003e\nReviewed-by: Takuto Ikuta \u003ctikuta@google.com\u003e\nReviewed-by: Brett Wilson \u003cbrettw@google.com\u003e\nReviewed-by: Sylvain Defresne \u003csdefresne@chromium.org\u003e\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "59d97c44212984a3410be82439f5bf7f55309556",
      "old_mode": 33188,
      "old_path": "src/gn/functions.cc",
      "new_id": "e41d688b5362c26a30ff30ce35a351bb7533f4f0",
      "new_mode": 33188,
      "new_path": "src/gn/functions.cc"
    },
    {
      "type": "modify",
      "old_id": "6498415bccef4550be1fda19453973c38f96d20e",
      "old_mode": 33188,
      "old_path": "src/gn/functions_unittest.cc",
      "new_id": "bb7b0a3d67c94e2089e9662f64bf42c405578293",
      "new_mode": 33188,
      "new_path": "src/gn/functions_unittest.cc"
    }
  ]
}
