)]}'
{
  "commit": "489e1e64cac462027e07457f2e1fcc56a2e92e5c",
  "tree": "d5df94c01b2933a8ef2c306106f6b8891ff3f136",
  "parents": [
    "b570afb665082eed867454bead54ab27bb520827"
  ],
  "author": {
    "name": "Liam Appelbe",
    "email": "liama@google.com",
    "time": "Wed Mar 16 01:21:39 2022 -0700"
  },
  "committer": {
    "name": "GitHub",
    "email": "noreply@github.com",
    "time": "Wed Mar 16 09:21:39 2022 +0100"
  },
  "message": "[ffigen] BindingsIndex refactor (#283)\n\nUnify and simplify how Types are cached and cycles are broken in the type graph.\r\n\r\n- All types that need to be cached (those that have a declaration cursor) are cached in `BindingsIndex._declaredTypes`\r\n- All calls to convert a `CXType` to an ffigen `Type` now go through `getCodeGenType`\r\n- All calls to the related sub-parsers (`parseCompoundDeclaration`, `parseEnumDeclaration`, `parseTypedefDeclaration`) also go through `getCodeGenType`\r\n- Those sub-parsers (mostly) don\u0027t know about `BindingsIndex`, and don\u0027t know about caching or cycle breaking. That\u0027s all handled in one place in `getCodeGenType`\r\n- Cycles are broken by dividing type conversion into 2 stages (the only conversion this matters for is compound types):\r\n    - First the `Type` is created, with as many fields filled in as possible, without a recursive call to `getCodeGenType` (everything except the list of members)\r\n    - Next, `getCodeGenType` inserts the type into the cache\r\n    - Finally, the members are filled in. Recursive calls to `getCodeGenType` are allowed here, as they will hit the cache, breaking any cycles.",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "125e78c72fff3118e64d71f14ccc5273281b409a",
      "old_mode": 33188,
      "old_path": "pkgs/ffigen/example/libclang-example/generated_bindings.dart",
      "new_id": "6f7323259bafcd24808bfa296653d89648a937ed",
      "new_mode": 33188,
      "new_path": "pkgs/ffigen/example/libclang-example/generated_bindings.dart"
    },
    {
      "type": "modify",
      "old_id": "9211d5fa0be0dc89f8c6de336358c4fd4dabbe5d",
      "old_mode": 33188,
      "old_path": "pkgs/ffigen/lib/src/header_parser/includer.dart",
      "new_id": "aaad6939e61e31f268b961b7c40b54e7566e5b0a",
      "new_mode": 33188,
      "new_path": "pkgs/ffigen/lib/src/header_parser/includer.dart"
    },
    {
      "type": "modify",
      "old_id": "431334a3a564c970a175e404398bf4c1018fd72d",
      "old_mode": 33188,
      "old_path": "pkgs/ffigen/lib/src/header_parser/sub_parsers/compounddecl_parser.dart",
      "new_id": "f1eb651b7ba24f33879ebdf5fd5a32c751feffae",
      "new_mode": 33188,
      "new_path": "pkgs/ffigen/lib/src/header_parser/sub_parsers/compounddecl_parser.dart"
    },
    {
      "type": "modify",
      "old_id": "c4b2ab8bda67439a1b83803f22a46750b84f17d1",
      "old_mode": 33188,
      "old_path": "pkgs/ffigen/lib/src/header_parser/sub_parsers/enumdecl_parser.dart",
      "new_id": "4e5e1506c93bb3cf5cbbf4e8ca52bc0abea8f7f8",
      "new_mode": 33188,
      "new_path": "pkgs/ffigen/lib/src/header_parser/sub_parsers/enumdecl_parser.dart"
    },
    {
      "type": "modify",
      "old_id": "3b8cd638d4c96f400995b80d6057a1cd616a9cb0",
      "old_mode": 33188,
      "old_path": "pkgs/ffigen/lib/src/header_parser/sub_parsers/functiondecl_parser.dart",
      "new_id": "870cf472108b4a519db7e8cd5edf85961c1bfbf6",
      "new_mode": 33188,
      "new_path": "pkgs/ffigen/lib/src/header_parser/sub_parsers/functiondecl_parser.dart"
    },
    {
      "type": "modify",
      "old_id": "90d5664d679d51a3988117fb4db309113ff5a982",
      "old_mode": 33188,
      "old_path": "pkgs/ffigen/lib/src/header_parser/sub_parsers/typedefdecl_parser.dart",
      "new_id": "d8f84cf08981e90d375a7d7bd90e657f629995cb",
      "new_mode": 33188,
      "new_path": "pkgs/ffigen/lib/src/header_parser/sub_parsers/typedefdecl_parser.dart"
    },
    {
      "type": "modify",
      "old_id": "9a576c052903ab61a421e02078702fbc72b99be1",
      "old_mode": 33188,
      "old_path": "pkgs/ffigen/lib/src/header_parser/translation_unit_parser.dart",
      "new_id": "60c623e3ce2099bd10aad634f57be761139f92d1",
      "new_mode": 33188,
      "new_path": "pkgs/ffigen/lib/src/header_parser/translation_unit_parser.dart"
    },
    {
      "type": "modify",
      "old_id": "606303561799877982e6074cf70f361ceb0b0f33",
      "old_mode": 33188,
      "old_path": "pkgs/ffigen/lib/src/header_parser/type_extractor/extractor.dart",
      "new_id": "8ea5d9664922d4319ce83fe2d0c2816c342bd5af",
      "new_mode": 33188,
      "new_path": "pkgs/ffigen/lib/src/header_parser/type_extractor/extractor.dart"
    },
    {
      "type": "modify",
      "old_id": "bac2eaf598c3242c6a76aa6c936523056f08ccc3",
      "old_mode": 33188,
      "old_path": "pkgs/ffigen/lib/src/header_parser/utils.dart",
      "new_id": "b11013459268e9ea05be8c532dcb700143fb5529",
      "new_mode": 33188,
      "new_path": "pkgs/ffigen/lib/src/header_parser/utils.dart"
    },
    {
      "type": "modify",
      "old_id": "cbfc6105cef33cb989cc65a51db3ec3612f1cb9b",
      "old_mode": 33188,
      "old_path": "pkgs/ffigen/lib/src/strings.dart",
      "new_id": "58e9b5dbc1963c720f03d00b43c8f8c241cee1da",
      "new_mode": 33188,
      "new_path": "pkgs/ffigen/lib/src/strings.dart"
    }
  ]
}
