30 lines
964 B
JavaScript
30 lines
964 B
JavaScript
// @enableNewMutationAliasingModel
|
|||
|
|
import {useEffect, useState} from 'react';
|
||
|
|
import {Stringify} from 'shared-runtime';
|
||
|
|
|
||
|
|
function Foo() {
|
||
|
|
/**
|
||
|
|
* Previously, this lowered to
|
||
|
|
* $1 = LoadContext capture setState
|
||
|
|
* $2 = FunctionExpression deps=$1 context=setState
|
||
|
|
* [[ at this point, we freeze the `LoadContext setState` instruction, but it will never be referenced again ]]
|
||
|
|
*
|
||
|
|
* Now, this function expression directly references `setState`, which freezes
|
||
|
|
* the source `DeclareContext HoistedConst setState`. Freezing source identifiers
|
||
|
|
* (instead of the one level removed `LoadContext`) is more semantically correct
|
||
|
|
* for everything *other* than hoisted context declarations.
|
||
|
|
*
|
||
|
|
* $2 = Function context=setState
|
||
|
|
*/
|
||
|
|
useEffect(() => setState(2), []);
|
||
|
|
|
||
|
|
const [state, setState] = useState(0);
|
||
|
|
return <Stringify state={state} />;
|
||
|
|
}
|
||
|
|
|
||
|
|
export const FIXTURE_ENTRYPOINT = {
|
||
|
|
fn: Foo,
|
||
|
|
params: [{}],
|
||
|
|
sequentialRenders: [{}, {}],
|
||
|
|
};
|