)]}'
{
  "commit": "5c0e0922d0755a2f06ea7961ebe85196df4a187d",
  "tree": "503e9b97509ab7577825a0c8e2d82ca7de81664f",
  "parents": [
    "9f33a4a0527802cffe097757badecf9ed0f97be9"
  ],
  "author": {
    "name": "Paul Berry",
    "email": "paulberry@google.com",
    "time": "Fri Mar 25 16:40:10 2022 +0000"
  },
  "committer": {
    "name": "Commit Bot",
    "email": "commit-bot@chromium.org",
    "time": "Fri Mar 25 16:40:10 2022 +0000"
  },
  "message": "Defer analysis of closure arguments when `inference-update-1` is enabled.\n\nIn order to address https://github.com/dart-lang/language/issues/731\n(improved type inference for `fold` etc.) we\u0027re going to need to\nsometimes defer analysis of invocation arguments that are closures, so\nthat closure parameters can have their types inferred based on other\nparameters.  To avoid annoying the user with inconsistent behaviors,\nwe defer analysis of closures in all circumstances, even if it\u0027s not\nnecessary to do so for type inference purposes.\n\nThis has a minor user-visible effect: if an invocation contains some\nclosures and some non-closures, any demotions that happen due to write\ncaptures in the closures are postponed until the end of the\ninvocation; this means that the write-captured variables remain\npromoted for other invocation arguments, even if those arguments\nappear after the closure.  This is safe because there is no way for\nthe closure to be called until after all of the other invocation\narguments are evaluated.  See the language tests in this CL for\ndetails.\n\nNote that this change only has an effect when the experimental feature\n`inference-update-1` is enabled.\n\nChange-Id: I283fc5eb07af2aeca0a06d523011d8c4617fbad7\nReviewed-on: https://dart-review.googlesource.com/c/sdk/+/237720\nReviewed-by: Samuel Rawlins \u003csrawlins@google.com\u003e\nCommit-Queue: Paul Berry \u003cpaulberry@google.com\u003e\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "bb407f0630148c733b17d04bd14f0464996b8fe4",
      "old_mode": 33188,
      "old_path": "pkg/analyzer/lib/dart/analysis/features.dart",
      "new_id": "211cc17262623a7c40b62363e47bbde2d067e228",
      "new_mode": 33188,
      "new_path": "pkg/analyzer/lib/dart/analysis/features.dart"
    },
    {
      "type": "modify",
      "old_id": "6867d3b23d09519df3f815316d9b07f683cb8172",
      "old_mode": 33188,
      "old_path": "pkg/analyzer/lib/src/dart/resolver/invocation_inferrer.dart",
      "new_id": "52fb27d4196ef3b5c5b99982156e885aea5d36ea",
      "new_mode": 33188,
      "new_path": "pkg/analyzer/lib/src/dart/resolver/invocation_inferrer.dart"
    },
    {
      "type": "modify",
      "old_id": "6b2ba66f3137cd2d6ab9bd054b8ab2a2242c1a3c",
      "old_mode": 33188,
      "old_path": "pkg/analyzer/lib/src/generated/resolver.dart",
      "new_id": "3c61b286743aa454b10ba0410ffd2d212a9841f2",
      "new_mode": 33188,
      "new_path": "pkg/analyzer/lib/src/generated/resolver.dart"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "209ee0fce63e26e335098f5bd1efa7a775b3906a",
      "new_mode": 33188,
      "new_path": "pkg/analyzer/test/src/dart/resolution/type_inference/inference_update_1_test.dart"
    },
    {
      "type": "modify",
      "old_id": "6c94826c5189ff155da4775586658c41092bebdc",
      "old_mode": 33188,
      "old_path": "pkg/analyzer/test/src/dart/resolution/type_inference/test_all.dart",
      "new_id": "ade0cef1e823547a8c3d5cfd32b8ac1bf03dbf2f",
      "new_mode": 33188,
      "new_path": "pkg/analyzer/test/src/dart/resolution/type_inference/test_all.dart"
    },
    {
      "type": "modify",
      "old_id": "3c71e5b40853759769fdd31bf507b183faf78877",
      "old_mode": 33188,
      "old_path": "pkg/test_runner/lib/src/test_file.dart",
      "new_id": "b39ba90d4fedecdce16812295cdde1d1ec1b65d8",
      "new_mode": 33188,
      "new_path": "pkg/test_runner/lib/src/test_file.dart"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "1083524567a7ed8e7a6d43177473173581279967",
      "new_mode": 33188,
      "new_path": "tests/language/inference_update_1/write_capture_deferral_disabled_test.dart"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "3a93caafeb11a7e12461fe2128cf357ba2e32e51",
      "new_mode": 33188,
      "new_path": "tests/language/inference_update_1/write_capture_deferral_enabled_test.dart"
    }
  ]
}
