mirror of
https://github.com/facebookarchive/prepack.git
synced 2024-10-26 23:32:02 +03:00
06736f0df5
Summary: Release notes: the side-effect detection system within pure scopes has been improved This PR revamps the entire `evaluatePure` system. The old system had so many small issues with it was the cause of many edge-cases that were hard to patch up. Specifically, the PR makes the following changes: - `realm.evaluatePure` -> `realm.evaluateWithPureScope` and now can only be used a single instance. Nesting further `realm.evaluateWithPureScope` calls will trigger an invariant and is strictly forbidden. Furthermore, it now only takes a single argument – the function you're wrapped around. - All places that used pure scope wrappers have been updated to conditionally enable it depending if the `realm.isInPureScope()` returns `true` or `false`. - `realm.evaluateFunctionForPureEffects` has been added, this works like `evaluateForEffects` except it requires a root function and a callback for side-effects. The callback for side-effects works like the old callback that was `evaluatePure`. - `realm.evaluateFunctionForPureEffectsInGlobalEnv` has been added a convenience wrapper around `realm.evaluateFunctionForPureEffects`. - When we leak bindings, we no longer set their value to `undefined` or `realm.intrinsics.undefined`. We now set the value to a special "leaked abstract", specifically – `realm.intrinsics.__leakedValue` – like `topValue` and `bottomValue`. Unsurprisingly, this now fixes a host of bugs that existed before. Including fixes for https://github.com/facebook/prepack/issues/2598, https://github.com/facebook/prepack/issues/2579, https://github.com/facebook/prepack/issues/2446, https://github.com/facebook/prepack/issues/2599 and probably many other issues too. The logic for detection of side-effects works very differently from before but after speaking to sebmarkbage last week, he pointed me in this direction to track side-effects rather than how we did it before. We now find side-effects from a given set of effects, rather than in an ad-hoc manor as mutations occur on objects/bindings. This PR requires https://github.com/facebook/prepack/pull/2596 as a dependency as it re-uses the logic. Closes https://github.com/facebook/prepack/pull/2587. Fixes https://github.com/facebook/prepack/issues/2598. Fixes https://github.com/facebook/prepack/issues/2579. Fixes https://github.com/facebook/prepack/issues/2446. Fixes https://github.com/facebook/prepack/issues/2599. Pull Request resolved: https://github.com/facebook/prepack/pull/2600 Differential Revision: D10368159 Pulled By: trueadm fbshipit-source-id: ded248f5cfd8648913cae9b9c697d723a82c59ab |
||
---|---|---|
.. | ||
__snapshots__ | ||
AssignSpread | ||
ClassComponents | ||
FactoryComponents | ||
FBMocks | ||
FirstRenderOnly | ||
FunctionalComponents | ||
ReactDOM | ||
ReactNative | ||
Reconciliation | ||
RenderProps | ||
ServerRendering | ||
Throw | ||
AssignSpread-test.js | ||
ClassComponents-test.js | ||
FactoryComponents-test.js | ||
FBMocks-test.js | ||
FirstRenderOnly-test.js | ||
FunctionalComponents-test.js | ||
ReactDOM-test.js | ||
ReactNative-test.js | ||
Reconciliation-test.js | ||
RenderProps-test.js | ||
ServerRendering-test.js | ||
setupReactTests.js | ||
Throw-test.js |