Skip to content

Commit b4d9c68

Browse files
committed
[compiler] Validate against mutable functions being frozen
This revisits a validation I built a while ago, trying to make it more strict this time to ensure that it's high-signal. We detect function expressions which are *known* mutable — they definitely can modify a variable defined outside of the function expression itself (modulo control flow). This uses types to look for known Store and Mutate effects only, and disregards mutations of effects. Any such function passed to a location with a Freeze effect is reported as a validation error. This is behind a flag and disabled by default. If folks agree this makes sense to revisit, i'll test out internally and we can consider enabling by default. ghstack-source-id: 075a731 Pull Request resolved: facebook#33079 DiffTrain build for [0db8db1](facebook@0db8db1)
1 parent c1ecc5a commit b4d9c68

31 files changed

+121299
-86
lines changed

compiled-rn/VERSION_NATIVE_FB

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
19.2.0-native-fb-f7396427-20250501
1+
19.2.0-native-fb-0db8db17-20250503

compiled-rn/facebook-fbsource/xplat/js/RKJSModules/vendor/react/react-dom/cjs/ReactDOM-dev.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
* @noflow
88
* @nolint
99
* @preventMunge
10-
* @generated SignedSource<<043c944609593df4f093b94c233d8862>>
10+
* @generated SignedSource<<edfdbed42db742e7d29c0b0e0587bbce>>
1111
*/
1212

1313
"use strict";
@@ -404,5 +404,5 @@ __DEV__ &&
404404
exports.useFormStatus = function () {
405405
return resolveDispatcher().useHostTransitionStatus();
406406
};
407-
exports.version = "19.2.0-native-fb-f7396427-20250501";
407+
exports.version = "19.2.0-native-fb-0db8db17-20250503";
408408
})();

compiled-rn/facebook-fbsource/xplat/js/RKJSModules/vendor/react/react-dom/cjs/ReactDOM-prod.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
* @noflow
88
* @nolint
99
* @preventMunge
10-
* @generated SignedSource<<212d4b40af0bb36075bc2069a8ba8f1c>>
10+
* @generated SignedSource<<4bdff0753e8390f3a1224bc19fe6ab8d>>
1111
*/
1212

1313
"use strict";
@@ -203,4 +203,4 @@ exports.useFormState = function (action, initialState, permalink) {
203203
exports.useFormStatus = function () {
204204
return ReactSharedInternals.H.useHostTransitionStatus();
205205
};
206-
exports.version = "19.2.0-native-fb-f7396427-20250501";
206+
exports.version = "19.2.0-native-fb-0db8db17-20250503";

compiled-rn/facebook-fbsource/xplat/js/RKJSModules/vendor/react/react-dom/cjs/ReactDOM-profiling.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
* @noflow
88
* @nolint
99
* @preventMunge
10-
* @generated SignedSource<<212d4b40af0bb36075bc2069a8ba8f1c>>
10+
* @generated SignedSource<<4bdff0753e8390f3a1224bc19fe6ab8d>>
1111
*/
1212

1313
"use strict";
@@ -203,4 +203,4 @@ exports.useFormState = function (action, initialState, permalink) {
203203
exports.useFormStatus = function () {
204204
return ReactSharedInternals.H.useHostTransitionStatus();
205205
};
206-
exports.version = "19.2.0-native-fb-f7396427-20250501";
206+
exports.version = "19.2.0-native-fb-0db8db17-20250503";

compiled-rn/facebook-fbsource/xplat/js/RKJSModules/vendor/react/react-dom/cjs/ReactDOMClient-dev.js

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
* @noflow
88
* @nolint
99
* @preventMunge
10-
* @generated SignedSource<<8df5dcfbf51848b2bc0bcd4f26a92759>>
10+
* @generated SignedSource<<f7683d03eae2281561d6531da72b4081>>
1111
*/
1212

1313
/*
@@ -26650,11 +26650,11 @@ __DEV__ &&
2665026650
};
2665126651
(function () {
2665226652
var isomorphicReactPackageVersion = React.version;
26653-
if ("19.2.0-native-fb-f7396427-20250501" !== isomorphicReactPackageVersion)
26653+
if ("19.2.0-native-fb-0db8db17-20250503" !== isomorphicReactPackageVersion)
2665426654
throw Error(
2665526655
'Incompatible React versions: The "react" and "react-dom" packages must have the exact same version. Instead got:\n - react: ' +
2665626656
(isomorphicReactPackageVersion +
26657-
"\n - react-dom: 19.2.0-native-fb-f7396427-20250501\nLearn more: https://react.dev/warnings/version-mismatch")
26657+
"\n - react-dom: 19.2.0-native-fb-0db8db17-20250503\nLearn more: https://react.dev/warnings/version-mismatch")
2665826658
);
2665926659
})();
2666026660
("function" === typeof Map &&
@@ -26691,10 +26691,10 @@ __DEV__ &&
2669126691
!(function () {
2669226692
var internals = {
2669326693
bundleType: 1,
26694-
version: "19.2.0-native-fb-f7396427-20250501",
26694+
version: "19.2.0-native-fb-0db8db17-20250503",
2669526695
rendererPackageName: "react-dom",
2669626696
currentDispatcherRef: ReactSharedInternals,
26697-
reconcilerVersion: "19.2.0-native-fb-f7396427-20250501"
26697+
reconcilerVersion: "19.2.0-native-fb-0db8db17-20250503"
2669826698
};
2669926699
internals.overrideHookState = overrideHookState;
2670026700
internals.overrideHookStateDeletePath = overrideHookStateDeletePath;
@@ -26838,5 +26838,5 @@ __DEV__ &&
2683826838
listenToAllSupportedEvents(container);
2683926839
return new ReactDOMHydrationRoot(initialChildren);
2684026840
};
26841-
exports.version = "19.2.0-native-fb-f7396427-20250501";
26841+
exports.version = "19.2.0-native-fb-0db8db17-20250503";
2684226842
})();

compiled-rn/facebook-fbsource/xplat/js/RKJSModules/vendor/react/react-dom/cjs/ReactDOMClient-prod.js

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
* @noflow
88
* @nolint
99
* @preventMunge
10-
* @generated SignedSource<<9108d7ab7b8be40b57a624168056c757>>
10+
* @generated SignedSource<<7163e0847b45896deed9bb98117e960c>>
1111
*/
1212

1313
/*
@@ -16748,14 +16748,14 @@ ReactDOMHydrationRoot.prototype.unstable_scheduleHydration = function (target) {
1674816748
};
1674916749
var isomorphicReactPackageVersion$jscomp$inline_1904 = React.version;
1675016750
if (
16751-
"19.2.0-native-fb-f7396427-20250501" !==
16751+
"19.2.0-native-fb-0db8db17-20250503" !==
1675216752
isomorphicReactPackageVersion$jscomp$inline_1904
1675316753
)
1675416754
throw Error(
1675516755
formatProdErrorMessage(
1675616756
527,
1675716757
isomorphicReactPackageVersion$jscomp$inline_1904,
16758-
"19.2.0-native-fb-f7396427-20250501"
16758+
"19.2.0-native-fb-0db8db17-20250503"
1675916759
)
1676016760
);
1676116761
ReactDOMSharedInternals.findDOMNode = function (componentOrElement) {
@@ -16777,10 +16777,10 @@ ReactDOMSharedInternals.findDOMNode = function (componentOrElement) {
1677716777
};
1677816778
var internals$jscomp$inline_2388 = {
1677916779
bundleType: 0,
16780-
version: "19.2.0-native-fb-f7396427-20250501",
16780+
version: "19.2.0-native-fb-0db8db17-20250503",
1678116781
rendererPackageName: "react-dom",
1678216782
currentDispatcherRef: ReactSharedInternals,
16783-
reconcilerVersion: "19.2.0-native-fb-f7396427-20250501"
16783+
reconcilerVersion: "19.2.0-native-fb-0db8db17-20250503"
1678416784
};
1678516785
if ("undefined" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__) {
1678616786
var hook$jscomp$inline_2389 = __REACT_DEVTOOLS_GLOBAL_HOOK__;
@@ -16884,4 +16884,4 @@ exports.hydrateRoot = function (container, initialChildren, options) {
1688416884
listenToAllSupportedEvents(container);
1688516885
return new ReactDOMHydrationRoot(initialChildren);
1688616886
};
16887-
exports.version = "19.2.0-native-fb-f7396427-20250501";
16887+
exports.version = "19.2.0-native-fb-0db8db17-20250503";

compiled-rn/facebook-fbsource/xplat/js/RKJSModules/vendor/react/react-dom/cjs/ReactDOMClient-profiling.js

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
* @noflow
88
* @nolint
99
* @preventMunge
10-
* @generated SignedSource<<4db75a13017302eb96e9cbbbe48d1a15>>
10+
* @generated SignedSource<<ae081becf54b589395e730390fc5b61e>>
1111
*/
1212

1313
/*
@@ -17457,14 +17457,14 @@ ReactDOMHydrationRoot.prototype.unstable_scheduleHydration = function (target) {
1745717457
};
1745817458
var isomorphicReactPackageVersion$jscomp$inline_2007 = React.version;
1745917459
if (
17460-
"19.2.0-native-fb-f7396427-20250501" !==
17460+
"19.2.0-native-fb-0db8db17-20250503" !==
1746117461
isomorphicReactPackageVersion$jscomp$inline_2007
1746217462
)
1746317463
throw Error(
1746417464
formatProdErrorMessage(
1746517465
527,
1746617466
isomorphicReactPackageVersion$jscomp$inline_2007,
17467-
"19.2.0-native-fb-f7396427-20250501"
17467+
"19.2.0-native-fb-0db8db17-20250503"
1746817468
)
1746917469
);
1747017470
ReactDOMSharedInternals.findDOMNode = function (componentOrElement) {
@@ -17486,10 +17486,10 @@ ReactDOMSharedInternals.findDOMNode = function (componentOrElement) {
1748617486
};
1748717487
var internals$jscomp$inline_2014 = {
1748817488
bundleType: 0,
17489-
version: "19.2.0-native-fb-f7396427-20250501",
17489+
version: "19.2.0-native-fb-0db8db17-20250503",
1749017490
rendererPackageName: "react-dom",
1749117491
currentDispatcherRef: ReactSharedInternals,
17492-
reconcilerVersion: "19.2.0-native-fb-f7396427-20250501",
17492+
reconcilerVersion: "19.2.0-native-fb-0db8db17-20250503",
1749317493
getLaneLabelMap: function () {
1749417494
for (
1749517495
var map = new Map(), lane = 1, index$305 = 0;
@@ -17608,4 +17608,4 @@ exports.hydrateRoot = function (container, initialChildren, options) {
1760817608
listenToAllSupportedEvents(container);
1760917609
return new ReactDOMHydrationRoot(initialChildren);
1761017610
};
17611-
exports.version = "19.2.0-native-fb-f7396427-20250501";
17611+
exports.version = "19.2.0-native-fb-0db8db17-20250503";

compiled-rn/facebook-fbsource/xplat/js/RKJSModules/vendor/react/react-dom/cjs/ReactDOMProfiling-dev.js

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
* @noflow
88
* @nolint
99
* @preventMunge
10-
* @generated SignedSource<<27ce14ac44d6d6b7628f5b7e39887fae>>
10+
* @generated SignedSource<<baa43b8401c3f37831daebd1792d9861>>
1111
*/
1212

1313
/*
@@ -26711,11 +26711,11 @@ __DEV__ &&
2671126711
};
2671226712
(function () {
2671326713
var isomorphicReactPackageVersion = React.version;
26714-
if ("19.2.0-native-fb-f7396427-20250501" !== isomorphicReactPackageVersion)
26714+
if ("19.2.0-native-fb-0db8db17-20250503" !== isomorphicReactPackageVersion)
2671526715
throw Error(
2671626716
'Incompatible React versions: The "react" and "react-dom" packages must have the exact same version. Instead got:\n - react: ' +
2671726717
(isomorphicReactPackageVersion +
26718-
"\n - react-dom: 19.2.0-native-fb-f7396427-20250501\nLearn more: https://react.dev/warnings/version-mismatch")
26718+
"\n - react-dom: 19.2.0-native-fb-0db8db17-20250503\nLearn more: https://react.dev/warnings/version-mismatch")
2671926719
);
2672026720
})();
2672126721
("function" === typeof Map &&
@@ -26752,10 +26752,10 @@ __DEV__ &&
2675226752
!(function () {
2675326753
var internals = {
2675426754
bundleType: 1,
26755-
version: "19.2.0-native-fb-f7396427-20250501",
26755+
version: "19.2.0-native-fb-0db8db17-20250503",
2675626756
rendererPackageName: "react-dom",
2675726757
currentDispatcherRef: ReactSharedInternals,
26758-
reconcilerVersion: "19.2.0-native-fb-f7396427-20250501"
26758+
reconcilerVersion: "19.2.0-native-fb-0db8db17-20250503"
2675926759
};
2676026760
internals.overrideHookState = overrideHookState;
2676126761
internals.overrideHookStateDeletePath = overrideHookStateDeletePath;
@@ -27215,7 +27215,7 @@ __DEV__ &&
2721527215
exports.useFormStatus = function () {
2721627216
return resolveDispatcher().useHostTransitionStatus();
2721727217
};
27218-
exports.version = "19.2.0-native-fb-f7396427-20250501";
27218+
exports.version = "19.2.0-native-fb-0db8db17-20250503";
2721927219
"undefined" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ &&
2722027220
"function" ===
2722127221
typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop &&

compiled-rn/facebook-fbsource/xplat/js/RKJSModules/vendor/react/react-dom/cjs/ReactDOMProfiling-prod.js

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
* @noflow
88
* @nolint
99
* @preventMunge
10-
* @generated SignedSource<<5e148f1dcf492da3936687c4f988fe4a>>
10+
* @generated SignedSource<<1f6d1d80a4af3b784f7f07276acc4bc1>>
1111
*/
1212

1313
/*
@@ -16759,14 +16759,14 @@ ReactDOMHydrationRoot.prototype.unstable_scheduleHydration = function (target) {
1675916759
};
1676016760
var isomorphicReactPackageVersion$jscomp$inline_1905 = React.version;
1676116761
if (
16762-
"19.2.0-native-fb-f7396427-20250501" !==
16762+
"19.2.0-native-fb-0db8db17-20250503" !==
1676316763
isomorphicReactPackageVersion$jscomp$inline_1905
1676416764
)
1676516765
throw Error(
1676616766
formatProdErrorMessage(
1676716767
527,
1676816768
isomorphicReactPackageVersion$jscomp$inline_1905,
16769-
"19.2.0-native-fb-f7396427-20250501"
16769+
"19.2.0-native-fb-0db8db17-20250503"
1677016770
)
1677116771
);
1677216772
ReactDOMSharedInternals.findDOMNode = function (componentOrElement) {
@@ -16788,10 +16788,10 @@ ReactDOMSharedInternals.findDOMNode = function (componentOrElement) {
1678816788
};
1678916789
var internals$jscomp$inline_2391 = {
1679016790
bundleType: 0,
16791-
version: "19.2.0-native-fb-f7396427-20250501",
16791+
version: "19.2.0-native-fb-0db8db17-20250503",
1679216792
rendererPackageName: "react-dom",
1679316793
currentDispatcherRef: ReactSharedInternals,
16794-
reconcilerVersion: "19.2.0-native-fb-f7396427-20250501"
16794+
reconcilerVersion: "19.2.0-native-fb-0db8db17-20250503"
1679516795
};
1679616796
if ("undefined" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__) {
1679716797
var hook$jscomp$inline_2392 = __REACT_DEVTOOLS_GLOBAL_HOOK__;
@@ -17049,4 +17049,4 @@ exports.useFormState = function (action, initialState, permalink) {
1704917049
exports.useFormStatus = function () {
1705017050
return ReactSharedInternals.H.useHostTransitionStatus();
1705117051
};
17052-
exports.version = "19.2.0-native-fb-f7396427-20250501";
17052+
exports.version = "19.2.0-native-fb-0db8db17-20250503";

compiled-rn/facebook-fbsource/xplat/js/RKJSModules/vendor/react/react-dom/cjs/ReactDOMProfiling-profiling.js

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
* @noflow
88
* @nolint
99
* @preventMunge
10-
* @generated SignedSource<<ae065278d2349ed3e1de385ebb77ec8a>>
10+
* @generated SignedSource<<383c7587f69ab15324513991674f5bd1>>
1111
*/
1212

1313
/*
@@ -17472,14 +17472,14 @@ ReactDOMHydrationRoot.prototype.unstable_scheduleHydration = function (target) {
1747217472
};
1747317473
var isomorphicReactPackageVersion$jscomp$inline_2008 = React.version;
1747417474
if (
17475-
"19.2.0-native-fb-f7396427-20250501" !==
17475+
"19.2.0-native-fb-0db8db17-20250503" !==
1747617476
isomorphicReactPackageVersion$jscomp$inline_2008
1747717477
)
1747817478
throw Error(
1747917479
formatProdErrorMessage(
1748017480
527,
1748117481
isomorphicReactPackageVersion$jscomp$inline_2008,
17482-
"19.2.0-native-fb-f7396427-20250501"
17482+
"19.2.0-native-fb-0db8db17-20250503"
1748317483
)
1748417484
);
1748517485
ReactDOMSharedInternals.findDOMNode = function (componentOrElement) {
@@ -17501,10 +17501,10 @@ ReactDOMSharedInternals.findDOMNode = function (componentOrElement) {
1750117501
};
1750217502
var internals$jscomp$inline_2015 = {
1750317503
bundleType: 0,
17504-
version: "19.2.0-native-fb-f7396427-20250501",
17504+
version: "19.2.0-native-fb-0db8db17-20250503",
1750517505
rendererPackageName: "react-dom",
1750617506
currentDispatcherRef: ReactSharedInternals,
17507-
reconcilerVersion: "19.2.0-native-fb-f7396427-20250501",
17507+
reconcilerVersion: "19.2.0-native-fb-0db8db17-20250503",
1750817508
getLaneLabelMap: function () {
1750917509
for (
1751017510
var map = new Map(), lane = 1, index$305 = 0;
@@ -17777,7 +17777,7 @@ exports.useFormState = function (action, initialState, permalink) {
1777717777
exports.useFormStatus = function () {
1777817778
return ReactSharedInternals.H.useHostTransitionStatus();
1777917779
};
17780-
exports.version = "19.2.0-native-fb-f7396427-20250501";
17780+
exports.version = "19.2.0-native-fb-0db8db17-20250503";
1778117781
"undefined" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ &&
1778217782
"function" ===
1778317783
typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop &&

compiled-rn/facebook-fbsource/xplat/js/RKJSModules/vendor/react/react-test-renderer/cjs/ReactTestRenderer-dev.js

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
* @noflow
88
* @nolint
99
* @preventMunge
10-
* @generated SignedSource<<20911676ee310f0e9decf9f7951a0591>>
10+
* @generated SignedSource<<85aa09f107ba434db93a065000252358>>
1111
*/
1212

1313
"use strict";
@@ -15630,10 +15630,10 @@ __DEV__ &&
1563015630
(function () {
1563115631
var internals = {
1563215632
bundleType: 1,
15633-
version: "19.2.0-native-fb-f7396427-20250501",
15633+
version: "19.2.0-native-fb-0db8db17-20250503",
1563415634
rendererPackageName: "react-test-renderer",
1563515635
currentDispatcherRef: ReactSharedInternals,
15636-
reconcilerVersion: "19.2.0-native-fb-f7396427-20250501"
15636+
reconcilerVersion: "19.2.0-native-fb-0db8db17-20250503"
1563715637
};
1563815638
internals.overrideHookState = overrideHookState;
1563915639
internals.overrideHookStateDeletePath = overrideHookStateDeletePath;
@@ -15778,5 +15778,5 @@ __DEV__ &&
1577815778
flushSyncWorkAcrossRoots_impl(0, !0));
1577915779
}
1578015780
};
15781-
exports.version = "19.2.0-native-fb-f7396427-20250501";
15781+
exports.version = "19.2.0-native-fb-0db8db17-20250503";
1578215782
})();

compiled-rn/facebook-fbsource/xplat/js/RKJSModules/vendor/react/react-test-renderer/cjs/ReactTestRenderer-prod.js

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
* @noflow
88
* @nolint
99
* @preventMunge
10-
* @generated SignedSource<<ebb00c975bbd386bad8b15981b381a7d>>
10+
* @generated SignedSource<<6251831c68c02a3006d79b6238425f93>>
1111
*/
1212

1313
"use strict";
@@ -9885,10 +9885,10 @@ function wrapFiber(fiber) {
98859885
}
98869886
var internals$jscomp$inline_1439 = {
98879887
bundleType: 0,
9888-
version: "19.2.0-native-fb-f7396427-20250501",
9888+
version: "19.2.0-native-fb-0db8db17-20250503",
98899889
rendererPackageName: "react-test-renderer",
98909890
currentDispatcherRef: ReactSharedInternals,
9891-
reconcilerVersion: "19.2.0-native-fb-f7396427-20250501"
9891+
reconcilerVersion: "19.2.0-native-fb-0db8db17-20250503"
98929892
};
98939893
if ("undefined" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__) {
98949894
var hook$jscomp$inline_1440 = __REACT_DEVTOOLS_GLOBAL_HOOK__;
@@ -10024,4 +10024,4 @@ exports.unstable_batchedUpdates = function (fn, a) {
1002410024
flushSyncWorkAcrossRoots_impl(0, !0));
1002510025
}
1002610026
};
10027-
exports.version = "19.2.0-native-fb-f7396427-20250501";
10027+
exports.version = "19.2.0-native-fb-0db8db17-20250503";

0 commit comments

Comments
 (0)