diff --git a/compiler/packages/babel-plugin-react-forget/src/__tests__/fixtures/compiler/array-map-captures-receiver-noAlias.expect.md b/compiler/packages/babel-plugin-react-forget/src/__tests__/fixtures/compiler/array-map-captures-receiver-noAlias.expect.md new file mode 100644 index 0000000000..3c9dd0d0de --- /dev/null +++ b/compiler/packages/babel-plugin-react-forget/src/__tests__/fixtures/compiler/array-map-captures-receiver-noAlias.expect.md @@ -0,0 +1,50 @@ + +## Input + +```javascript +// @enableNoAliasOptimizations +function Component(props) { + // This item is part of the receiver, should be memoized + const item = { a: props.a }; + const items = [item]; + const mapped = items.map((item) => item); + return mapped; +} + +export const FIXTURE_ENTRYPOINT = { + fn: Component, + params: [{ a: { id: 42 } }], + isComponent: false, +}; + +``` + +## Code + +```javascript +import { unstable_useMemoCache as useMemoCache } from "react"; // @enableNoAliasOptimizations +function Component(props) { + const $ = useMemoCache(2); + const c_0 = $[0] !== props.a; + let t0; + if (c_0) { + const item = { a: props.a }; + const items = [item]; + t0 = items.map((item_0) => item_0); + $[0] = props.a; + $[1] = t0; + } else { + t0 = $[1]; + } + const mapped = t0; + return mapped; +} + +export const FIXTURE_ENTRYPOINT = { + fn: Component, + params: [{ a: { id: 42 } }], + isComponent: false, +}; + +``` + \ No newline at end of file diff --git a/compiler/packages/babel-plugin-react-forget/src/__tests__/fixtures/compiler/array-map-captures-receiver-noAlias.js b/compiler/packages/babel-plugin-react-forget/src/__tests__/fixtures/compiler/array-map-captures-receiver-noAlias.js new file mode 100644 index 0000000000..d5914bf00f --- /dev/null +++ b/compiler/packages/babel-plugin-react-forget/src/__tests__/fixtures/compiler/array-map-captures-receiver-noAlias.js @@ -0,0 +1,14 @@ +// @enableNoAliasOptimizations +function Component(props) { + // This item is part of the receiver, should be memoized + const item = { a: props.a }; + const items = [item]; + const mapped = items.map((item) => item); + return mapped; +} + +export const FIXTURE_ENTRYPOINT = { + fn: Component, + params: [{ a: { id: 42 } }], + isComponent: false, +}; diff --git a/compiler/packages/babel-plugin-react-forget/src/__tests__/fixtures/compiler/array-map-noAlias-escaping-function.expect.md b/compiler/packages/babel-plugin-react-forget/src/__tests__/fixtures/compiler/array-map-noAlias-escaping-function.expect.md index af22a304df..1bf189fbc7 100644 --- a/compiler/packages/babel-plugin-react-forget/src/__tests__/fixtures/compiler/array-map-noAlias-escaping-function.expect.md +++ b/compiler/packages/babel-plugin-react-forget/src/__tests__/fixtures/compiler/array-map-noAlias-escaping-function.expect.md @@ -2,6 +2,7 @@ ## Input ```javascript +// @enableNoAliasOptimizations function Component(props) { const f = (item) => item; const x = [...props.items].map(f); // `f` doesn't escape here... @@ -19,7 +20,7 @@ export const FIXTURE_ENTRYPOINT = { ## Code ```javascript -import { unstable_useMemoCache as useMemoCache } from "react"; +import { unstable_useMemoCache as useMemoCache } from "react"; // @enableNoAliasOptimizations function Component(props) { const $ = useMemoCache(5); let t0; diff --git a/compiler/packages/babel-plugin-react-forget/src/__tests__/fixtures/compiler/array-map-noAlias-escaping-function.js b/compiler/packages/babel-plugin-react-forget/src/__tests__/fixtures/compiler/array-map-noAlias-escaping-function.js index 60726b5e5c..461a166366 100644 --- a/compiler/packages/babel-plugin-react-forget/src/__tests__/fixtures/compiler/array-map-noAlias-escaping-function.js +++ b/compiler/packages/babel-plugin-react-forget/src/__tests__/fixtures/compiler/array-map-noAlias-escaping-function.js @@ -1,3 +1,4 @@ +// @enableNoAliasOptimizations function Component(props) { const f = (item) => item; const x = [...props.items].map(f); // `f` doesn't escape here...