)]}'
{
  "commit": "94e12177746cb45954ff331c9684e8abdb1adeef",
  "tree": "c2318d495bf8f01bd6fb1359af794a98c82e9d40",
  "parents": [
    "672877606d657a8217bf2c6d4ed6cb8e14da699c"
  ],
  "author": {
    "name": "Srujan Gaddam",
    "email": "srujzs@google.com",
    "time": "Mon Apr 27 20:32:55 2026 -0700"
  },
  "committer": {
    "name": "dart-scoped@luci-project-accounts.iam.gserviceaccount.com",
    "email": "dart-scoped@luci-project-accounts.iam.gserviceaccount.com",
    "time": "Mon Apr 27 20:32:55 2026 -0700"
  },
  "message": "Reland \"[dart:js_interop] Make JSFunction and JSExportedDartFunction generic\"\n\nThis is a reland of commit e7dbd6ba4866af42b917da42433cc651afd650b8\n\nOriginal change\u0027s description:\n\u003e [dart:js_interop] Make JSFunction and JSExportedDartFunction generic\n\u003e\n\u003e Fixes https://github.com/dart-lang/sdk/issues/54557\n\u003e\n\u003e The generic type in JSExportedDartFunction corresponds to the\n\u003e static type of the function it wrapped, whereas for JSFunction,\n\u003e it\u0027s purely a descriptor of the JS function.\n\u003e\n\u003e When calling JSExportedDartFunction, a cast is now introduced\n\u003e to cast it to T.\n\u003e\n\u003e When calling isA, the type in JSExportedDartFunction is passed\n\u003e along to check that the value that is wrapped is that function\n\u003e type. Because the T in JSFunction is descriptive, e.g.\n\u003e isA\u003cJSFunction\u003cint Function()\u003e\u003e() does no such check.\n\u003e\n\u003e ____\n\u003e\n\u003e Also cleans up:\n\u003e\n\u003e - isA\u003cJSTypedArray\u003e() logic to use intrinsic functions\n\u003e - some expectation files to be consistent for both dart2js and ddc.\n\u003e\n\u003e CoreLibraryReviewExempt: Backend-specific library with needed reviews.\n\u003e Change-Id: I1a55c4386e416fa4ccabe06ac5051f41c2e2e95a\n\u003e Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/496820\n\u003e Reviewed-by: Lasse Nielsen \u003clrn@google.com\u003e\n\u003e Commit-Queue: Srujan Gaddam \u003csrujzs@google.com\u003e\n\u003e Reviewed-by: Martin Kustermann \u003ckustermann@google.com\u003e\n\nCoreLibraryReviewExempt: Reland.\nChange-Id: I29d706aa4967fd80390e8cb37f8144603ec007f5\nReviewed-on: https://dart-review.googlesource.com/c/sdk/+/498100\nCommit-Queue: Srujan Gaddam \u003csrujzs@google.com\u003e\nReviewed-by: Martin Kustermann \u003ckustermann@google.com\u003e\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "abb22816a42d68c71c9ab614f7227ac139a74cb3",
      "old_mode": 33188,
      "old_path": "CHANGELOG.md",
      "new_id": "4cada8500c4976a313f0a20524c895479e76fc11",
      "new_mode": 33188,
      "new_path": "CHANGELOG.md"
    },
    {
      "type": "modify",
      "old_id": "2fa73eb877a82b8f5d15fc75522991f29dad8a3f",
      "old_mode": 33188,
      "old_path": "pkg/_js_interop_checks/lib/src/transformations/js_util_optimizer.dart",
      "new_id": "dc36f98b0c1fbb5ab0fa340ec270cbc1f00057a6",
      "new_mode": 33188,
      "new_path": "pkg/_js_interop_checks/lib/src/transformations/js_util_optimizer.dart"
    },
    {
      "type": "modify",
      "old_id": "b7f935d67518183030f32e363d858cb55f7a9c80",
      "old_mode": 33188,
      "old_path": "pkg/_js_interop_checks/lib/src/transformations/shared_interop_transformer.dart",
      "new_id": "6ac643e643551b0a91fa7ac780944b8f5222e408",
      "new_mode": 33188,
      "new_path": "pkg/_js_interop_checks/lib/src/transformations/shared_interop_transformer.dart"
    },
    {
      "type": "modify",
      "old_id": "81d2853c428dd26b177bf983d61d8e4bd48db095",
      "old_mode": 33188,
      "old_path": "pkg/front_end/testcases/dart2js/js_interop_transforms/functiontojs.dart.strong.expect",
      "new_id": "f852e42e4bfdd18e9ea62ed6b3c555a18e236562",
      "new_mode": 33188,
      "new_path": "pkg/front_end/testcases/dart2js/js_interop_transforms/functiontojs.dart.strong.expect"
    },
    {
      "type": "modify",
      "old_id": "81d2853c428dd26b177bf983d61d8e4bd48db095",
      "old_mode": 33188,
      "old_path": "pkg/front_end/testcases/dart2js/js_interop_transforms/functiontojs.dart.strong.modular.expect",
      "new_id": "f852e42e4bfdd18e9ea62ed6b3c555a18e236562",
      "new_mode": 33188,
      "new_path": "pkg/front_end/testcases/dart2js/js_interop_transforms/functiontojs.dart.strong.modular.expect"
    },
    {
      "type": "modify",
      "old_id": "fadb6a53a3f12d7de1d1d752228cb9ba44593829",
      "old_mode": 33188,
      "old_path": "pkg/front_end/testcases/dart2js/js_interop_transforms/functiontojs.dart.strong.transformed.expect",
      "new_id": "5b27e50032be75a6f7b93f82b020f8b169ae8d64",
      "new_mode": 33188,
      "new_path": "pkg/front_end/testcases/dart2js/js_interop_transforms/functiontojs.dart.strong.transformed.expect"
    },
    {
      "type": "modify",
      "old_id": "33162014e9f972374ced513148ff05fa0dd32a75",
      "old_mode": 33188,
      "old_path": "pkg/front_end/testcases/dart2js/js_interop_transforms/isa.dart",
      "new_id": "702d60aa7257654e5c2c1e8c5b2a2ab761eefe07",
      "new_mode": 33188,
      "new_path": "pkg/front_end/testcases/dart2js/js_interop_transforms/isa.dart"
    },
    {
      "type": "modify",
      "old_id": "3094118cfcae6ae56dad7491e164417532b9455a",
      "old_mode": 33188,
      "old_path": "pkg/front_end/testcases/dart2js/js_interop_transforms/isa.dart.strong.expect",
      "new_id": "f81967793a619c2e53e6b8313b3a7482bf034982",
      "new_mode": 33188,
      "new_path": "pkg/front_end/testcases/dart2js/js_interop_transforms/isa.dart.strong.expect"
    },
    {
      "type": "modify",
      "old_id": "3094118cfcae6ae56dad7491e164417532b9455a",
      "old_mode": 33188,
      "old_path": "pkg/front_end/testcases/dart2js/js_interop_transforms/isa.dart.strong.modular.expect",
      "new_id": "f81967793a619c2e53e6b8313b3a7482bf034982",
      "new_mode": 33188,
      "new_path": "pkg/front_end/testcases/dart2js/js_interop_transforms/isa.dart.strong.modular.expect"
    },
    {
      "type": "modify",
      "old_id": "3c0d4e9cef3b9eafb43c7d501d30c035e6762e85",
      "old_mode": 33188,
      "old_path": "pkg/front_end/testcases/dart2js/js_interop_transforms/isa.dart.strong.transformed.expect",
      "new_id": "94e5fcca24a4df7234164c303a68b4a9269824b0",
      "new_mode": 33188,
      "new_path": "pkg/front_end/testcases/dart2js/js_interop_transforms/isa.dart.strong.transformed.expect"
    },
    {
      "type": "modify",
      "old_id": "d4eb06f56e7a9996cff4591971ffe69c5d80c4be",
      "old_mode": 33188,
      "old_path": "pkg/front_end/testcases/dartdevc/js_interop_transforms/functiontojs.dart.strong.expect",
      "new_id": "ba67a5672797b64fb9dd57dd74ea0e999991afcf",
      "new_mode": 33188,
      "new_path": "pkg/front_end/testcases/dartdevc/js_interop_transforms/functiontojs.dart.strong.expect"
    },
    {
      "type": "modify",
      "old_id": "d4eb06f56e7a9996cff4591971ffe69c5d80c4be",
      "old_mode": 33188,
      "old_path": "pkg/front_end/testcases/dartdevc/js_interop_transforms/functiontojs.dart.strong.modular.expect",
      "new_id": "ba67a5672797b64fb9dd57dd74ea0e999991afcf",
      "new_mode": 33188,
      "new_path": "pkg/front_end/testcases/dartdevc/js_interop_transforms/functiontojs.dart.strong.modular.expect"
    },
    {
      "type": "modify",
      "old_id": "fb798b1460c89157385145a9a638c35bc1c2f2de",
      "old_mode": 33188,
      "old_path": "pkg/front_end/testcases/dartdevc/js_interop_transforms/functiontojs.dart.strong.transformed.expect",
      "new_id": "819abf772076d36b23306851c963b0efe2ee180c",
      "new_mode": 33188,
      "new_path": "pkg/front_end/testcases/dartdevc/js_interop_transforms/functiontojs.dart.strong.transformed.expect"
    },
    {
      "type": "modify",
      "old_id": "b9a1e0877c78eb1f81353c93e6de4599414b3ff3",
      "old_mode": 33188,
      "old_path": "pkg/front_end/testcases/dartdevc/js_interop_transforms/isa.dart",
      "new_id": "702d60aa7257654e5c2c1e8c5b2a2ab761eefe07",
      "new_mode": 33188,
      "new_path": "pkg/front_end/testcases/dartdevc/js_interop_transforms/isa.dart"
    },
    {
      "type": "modify",
      "old_id": "99b5d3fa7c0e140b02d323a9fb98c01a5a525b80",
      "old_mode": 33188,
      "old_path": "pkg/front_end/testcases/dartdevc/js_interop_transforms/isa.dart.strong.expect",
      "new_id": "24e91920b8110f991281f1c1be9aefb1dbab8f2f",
      "new_mode": 33188,
      "new_path": "pkg/front_end/testcases/dartdevc/js_interop_transforms/isa.dart.strong.expect"
    },
    {
      "type": "modify",
      "old_id": "99b5d3fa7c0e140b02d323a9fb98c01a5a525b80",
      "old_mode": 33188,
      "old_path": "pkg/front_end/testcases/dartdevc/js_interop_transforms/isa.dart.strong.modular.expect",
      "new_id": "24e91920b8110f991281f1c1be9aefb1dbab8f2f",
      "new_mode": 33188,
      "new_path": "pkg/front_end/testcases/dartdevc/js_interop_transforms/isa.dart.strong.modular.expect"
    },
    {
      "type": "modify",
      "old_id": "cfd34bb6fcd5118bc846385702800e5b9df1482b",
      "old_mode": 33188,
      "old_path": "pkg/front_end/testcases/dartdevc/js_interop_transforms/isa.dart.strong.transformed.expect",
      "new_id": "747fa58aeb49daa90a4d87b7597f981c7634d36f",
      "new_mode": 33188,
      "new_path": "pkg/front_end/testcases/dartdevc/js_interop_transforms/isa.dart.strong.transformed.expect"
    },
    {
      "type": "modify",
      "old_id": "657a03533450959f25586c0e611b1bdcdb2667d3",
      "old_mode": 33188,
      "old_path": "sdk/lib/_internal/js_dev_runtime/patch/js_allow_interop_patch.dart",
      "new_id": "359151f76c8e4fcc96de6842010ea86aa9950f0b",
      "new_mode": 33188,
      "new_path": "sdk/lib/_internal/js_dev_runtime/patch/js_allow_interop_patch.dart"
    },
    {
      "type": "modify",
      "old_id": "427d332fa4f354c2f73992e8eeaf7afebe9d202a",
      "old_mode": 33188,
      "old_path": "sdk/lib/_internal/js_dev_runtime/private/interceptors.dart",
      "new_id": "6b43f590b6bbed6aba13185e970f358d26e0c682",
      "new_mode": 33188,
      "new_path": "sdk/lib/_internal/js_dev_runtime/private/interceptors.dart"
    },
    {
      "type": "modify",
      "old_id": "9a9f340d257af2a43d8fc296372b8680ebfb85eb",
      "old_mode": 33188,
      "old_path": "sdk/lib/_internal/js_runtime/lib/interceptors.dart",
      "new_id": "b73c725a5effc2c8b9b89f41865ce47c967c348d",
      "new_mode": 33188,
      "new_path": "sdk/lib/_internal/js_runtime/lib/interceptors.dart"
    },
    {
      "type": "modify",
      "old_id": "27d127bad70d26f75757e395becc6db97a3990d4",
      "old_mode": 33188,
      "old_path": "sdk/lib/_internal/js_runtime/lib/js_allow_interop_patch.dart",
      "new_id": "fadaccf47f0898f53037708fcfb1b413349d752c",
      "new_mode": 33188,
      "new_path": "sdk/lib/_internal/js_runtime/lib/js_allow_interop_patch.dart"
    },
    {
      "type": "modify",
      "old_id": "03b3cac59a19d23aefbf41bd6a2da6609d60fc00",
      "old_mode": 33188,
      "old_path": "sdk/lib/_internal/js_shared/lib/js_interop_patch.dart",
      "new_id": "dba3f79ea9435c0ed1d337200990e48d5dc90439",
      "new_mode": 33188,
      "new_path": "sdk/lib/_internal/js_shared/lib/js_interop_patch.dart"
    },
    {
      "type": "modify",
      "old_id": "d7a8434481837304a688ab9ab553a030c1353697",
      "old_mode": 33188,
      "old_path": "sdk/lib/_internal/wasm/lib/js_interop_patch.dart",
      "new_id": "3b8761ed0595ee9cde29becfd758ffda9509e912",
      "new_mode": 33188,
      "new_path": "sdk/lib/_internal/wasm/lib/js_interop_patch.dart"
    },
    {
      "type": "modify",
      "old_id": "483b00e6bb5b73c8bca21ee9373758bf83d2a039",
      "old_mode": 33188,
      "old_path": "sdk/lib/js_interop/js_interop.dart",
      "new_id": "0f5d2b6f0c44981f39fe32c43ff7651ee6e5fb27",
      "new_mode": 33188,
      "new_path": "sdk/lib/js_interop/js_interop.dart"
    },
    {
      "type": "modify",
      "old_id": "88d8ff5c600ca9f280cca4d9fa23f94713b088f0",
      "old_mode": 33188,
      "old_path": "tests/lib/js/static_interop_test/external_dart_reference_test.dart",
      "new_id": "5b5bd2311bad8fea2ad478d5a925525017b5a650",
      "new_mode": 33188,
      "new_path": "tests/lib/js/static_interop_test/external_dart_reference_test.dart"
    },
    {
      "type": "modify",
      "old_id": "46486a7b7a839751656f97bb90163cd5f2d3add4",
      "old_mode": 33188,
      "old_path": "tests/lib/js/static_interop_test/isa/isa_test.dart",
      "new_id": "6913d33f7de264006b165af1440a25ce7889495c",
      "new_mode": 33188,
      "new_path": "tests/lib/js/static_interop_test/isa/isa_test.dart"
    },
    {
      "type": "modify",
      "old_id": "100c30dbbc297c492a4c4fd06c6358690e04a53f",
      "old_mode": 33188,
      "old_path": "tests/lib/js/static_interop_test/js_types_static_errors_test.dart",
      "new_id": "4b5c1433d76cbc6293f44d4c3c71ee42ee6c7dd8",
      "new_mode": 33188,
      "new_path": "tests/lib/js/static_interop_test/js_types_static_errors_test.dart"
    },
    {
      "type": "modify",
      "old_id": "6945cf0fc7ef409f7f32a59d3ce59a72fbf8381b",
      "old_mode": 33188,
      "old_path": "tests/lib/js/static_interop_test/js_types_test.dart",
      "new_id": "56a670e4cc62b68ad500f4bafdb9423ec4560517",
      "new_mode": 33188,
      "new_path": "tests/lib/js/static_interop_test/js_types_test.dart"
    }
  ]
}
