)]}'
{
  "commit": "78ce85a7fe6f2c0ca80bc6a3073ee9243af11e8a",
  "tree": "770a21725166cd053bb677facb6927cf1c004763",
  "parents": [
    "b59c3e22ef586a18259d0b3ae131c7576f5fdf72"
  ],
  "author": {
    "name": "Ömer Sinan Ağacan",
    "email": "omersa@google.com",
    "time": "Thu Jan 16 03:24:39 2025 -0800"
  },
  "committer": {
    "name": "Commit Queue",
    "email": "dart-scoped@luci-project-accounts.iam.gserviceaccount.com",
    "time": "Thu Jan 16 03:24:39 2025 -0800"
  },
  "message": "[dart2wasm,tfa] Don\u0027t infer class of string values in comparisons\n\nIn dart2wasm, when a comparison like `x \u003d\u003d \"hello\"` is true, we can\u0027t\nassume that the class of `x` is the same as the class of `\"hello\"`:\n\n- If `x` is received from JS, it will be `JSStringImpl`.\n- If it\u0027s a substring of a `TwoByteString`, it will be `TwoByteString`.\n- Otherwise it will be `OneByteString`.\n\nUpdate `Target` with the new method\n\n```\nbool get canInferStringClassAfterEqualityComparison \u003d\u003e true;\n```\n\nto allow TFA to *not* infer classes of string values after comparisons.\n\nOverride the method to return `false` in dart2wasm\u0027s `Target`\nimplementation.\n\nFixes #59901.\nTested: web/wasm/issue_59901_test\nChange-Id: I1a6c8deaf27c54240dd4e821dbd8160914502ad7\nReviewed-on: https://dart-review.googlesource.com/c/sdk/+/404562\nReviewed-by: Martin Kustermann \u003ckustermann@google.com\u003e\nReviewed-by: Johnni Winther \u003cjohnniwinther@google.com\u003e\nCommit-Queue: Ömer Ağacan \u003comersa@google.com\u003e\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "87e30c4b7d075867aea49112cceb8dedcc2bd1c5",
      "old_mode": 33188,
      "old_path": "pkg/dart2wasm/lib/target.dart",
      "new_id": "ff37a62a8bf21fff519c49acda79f27387b7fa3b",
      "new_mode": 33188,
      "new_path": "pkg/dart2wasm/lib/target.dart"
    },
    {
      "type": "modify",
      "old_id": "fda4156a957a29e882dfbfe906103bbcb7586f83",
      "old_mode": 33188,
      "old_path": "pkg/kernel/lib/target/targets.dart",
      "new_id": "dcdda51e318332c94ebfc2b852bd6f2d879687a5",
      "new_mode": 33188,
      "new_path": "pkg/kernel/lib/target/targets.dart"
    },
    {
      "type": "modify",
      "old_id": "19bdfccefc5aa8b2ea6d82c49d5e4fabc35c5016",
      "old_mode": 33188,
      "old_path": "pkg/vm/lib/transformations/type_flow/summary_collector.dart",
      "new_id": "87cfc9f1afa1ca6ce6849432a072e031040ec2f9",
      "new_mode": 33188,
      "new_path": "pkg/vm/lib/transformations/type_flow/summary_collector.dart"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "04b15dfd8abb79a96ea90983236ad43e4a54bcfb",
      "new_mode": 33188,
      "new_path": "tests/web/wasm/issue_59901_test.dart"
    }
  ]
}
