)]}'
{
  "commit": "38c08f919d0e9c0cfabfcd04af797e091f0bbaac",
  "tree": "7ef257f260e6abc4b092c3f05d48cd80bfaef435",
  "parents": [
    "6d5aa7928958fd6133fad58215540bd11ca8484f"
  ],
  "author": {
    "name": "Paul Berry",
    "email": "paulberry@google.com",
    "time": "Fri Oct 04 13:44:40 2024 +0000"
  },
  "committer": {
    "name": "Commit Queue",
    "email": "dart-scoped@luci-project-accounts.iam.gserviceaccount.com",
    "time": "Fri Oct 04 13:44:40 2024 +0000"
  },
  "message": "[flow analysis] Remove ExpressionInfo.after.\n\nPreviously, the base `ExpressionInfo` class contained four fields:\n\n- `type`: the type of the expression.\n\n- `ifTrue`: a flow model describing the state of the program after the\n  expression is evaluated, assuming the expression evaluates to\n  `true`.\n\n- `ifFalse`: a flow model describing the state of the program after\n  the expression is evaluated, assuming the expression evaluates to\n  `false`.\n\n- `after`: a flow model describing the state of the prorgam after the\n  expression is evaluated, making no assumptions about what value the\n  expression evaluates to.\n\nThe `after` field was largely redundant, since it tracked the same\ninformation as `FlowAnalysisImpl._current`. In fact, flow analysis\ncontained a substantial amount of code to copy from\n`ExpressionInfo.after` to `FlowAnalysisImpl._current`, or vice versa,\nin order to keep the two in sync.\n\nThe one exception was in `FlowAnalysisImpl.conditional_end`, which is\ncalled at the end of visiting a conditional expression (`e1 ? e2 :\ne3`): it joined the `after` flow models from `e2` and `e3` in order to\ndetermine the state of the program after the conditional expression\ncompletes. To preserve this behavior, a small amount of extra\naccounting logic had to be added to the handling of conditional\nexpressions, to keep track of these flow models. (`e2.after` is now\nstored in `_ConditionalContext.thenModel`, and `e3.after` comes from\nthe state of `_current` at the time of entry into\n`FlowAnalysisImpl.conditional_end`).\n\nChange-Id: I46e771f8b029550d43a5fe50366177f189a6a91d\nReviewed-on: https://dart-review.googlesource.com/c/sdk/+/388081\nCommit-Queue: Paul Berry \u003cpaulberry@google.com\u003e\nReviewed-by: Kallen Tu \u003ckallentu@google.com\u003e\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "a7fe1b7fdf41147dcb6f3f24d9ba1b9d717dbd1f",
      "old_mode": 33188,
      "old_path": "pkg/_fe_analyzer_shared/lib/src/flow_analysis/flow_analysis.dart",
      "new_id": "3255c82dc5af97480d706de994dce049999f9c21",
      "new_mode": 33188,
      "new_path": "pkg/_fe_analyzer_shared/lib/src/flow_analysis/flow_analysis.dart"
    },
    {
      "type": "modify",
      "old_id": "bc972a2ab743c87fef1cc55d157a013a2de58b66",
      "old_mode": 33188,
      "old_path": "pkg/_fe_analyzer_shared/test/flow_analysis/flow_analysis_test.dart",
      "new_id": "c125b8198d29d5092619a4988b92da0898b258d0",
      "new_mode": 33188,
      "new_path": "pkg/_fe_analyzer_shared/test/flow_analysis/flow_analysis_test.dart"
    }
  ]
}
