From fe29f46de8ef57d30c29ccffde780927c1c986f5 Mon Sep 17 00:00:00 2001 From: Joe Savona Date: Wed, 13 Mar 2024 15:31:51 -0700 Subject: [PATCH] Repro for multiple declarations in for initializer codegen issue --- ...able-declarations-in-initializer.expect.md | 38 +++++++++++++++++++ ...le-variable-declarations-in-initializer.js | 9 +++++ .../packages/snap/src/SproutTodoFilter.ts | 1 + 3 files changed, 48 insertions(+) create mode 100644 compiler/packages/babel-plugin-react-forget/src/__tests__/fixtures/compiler/for-multiple-variable-declarations-in-initializer.expect.md create mode 100644 compiler/packages/babel-plugin-react-forget/src/__tests__/fixtures/compiler/for-multiple-variable-declarations-in-initializer.js diff --git a/compiler/packages/babel-plugin-react-forget/src/__tests__/fixtures/compiler/for-multiple-variable-declarations-in-initializer.expect.md b/compiler/packages/babel-plugin-react-forget/src/__tests__/fixtures/compiler/for-multiple-variable-declarations-in-initializer.expect.md new file mode 100644 index 0000000000..a17bc0d3b6 --- /dev/null +++ b/compiler/packages/babel-plugin-react-forget/src/__tests__/fixtures/compiler/for-multiple-variable-declarations-in-initializer.expect.md @@ -0,0 +1,38 @@ + +## Input + +```javascript +function Component(props) { + const items = []; + + for (let i = 0, length = props.items.length; i < length; i++) { + items.push(props.items[i]); + } + + return items; +} + +``` + +## Code + +```javascript +import { unstable_useMemoCache as useMemoCache } from "react"; +function Component(props) { + const $ = useMemoCache(2); + let items; + if ($[0] !== props.items) { + items = []; + for (let i = 0; i < length; i++) { + items.push(props.items[i]); + } + $[0] = props.items; + $[1] = items; + } else { + items = $[1]; + } + return items; +} + +``` + \ No newline at end of file diff --git a/compiler/packages/babel-plugin-react-forget/src/__tests__/fixtures/compiler/for-multiple-variable-declarations-in-initializer.js b/compiler/packages/babel-plugin-react-forget/src/__tests__/fixtures/compiler/for-multiple-variable-declarations-in-initializer.js new file mode 100644 index 0000000000..da0aa25b58 --- /dev/null +++ b/compiler/packages/babel-plugin-react-forget/src/__tests__/fixtures/compiler/for-multiple-variable-declarations-in-initializer.js @@ -0,0 +1,9 @@ +function Component(props) { + const items = []; + + for (let i = 0, length = props.items.length; i < length; i++) { + items.push(props.items[i]); + } + + return items; +} diff --git a/compiler/packages/snap/src/SproutTodoFilter.ts b/compiler/packages/snap/src/SproutTodoFilter.ts index af1b1e0a43..3575959121 100644 --- a/compiler/packages/snap/src/SproutTodoFilter.ts +++ b/compiler/packages/snap/src/SproutTodoFilter.ts @@ -535,6 +535,7 @@ const skipFilter = new Set([ "bug-jsx-memberexpr-tag-in-lambda", "bug-invalid-code-when-bailout", "component-syntax-ref-gating.flow", + "for-multiple-variable-declarations-in-initializer", // 'react-forget-runtime' not yet supported "flag-enable-emit-hook-guards",