From f30041b0f0d695236ecbd3585d99e4ee44954a9e Mon Sep 17 00:00:00 2001 From: Joe Savona Date: Wed, 17 May 2023 15:55:52 -0700 Subject: [PATCH] More useMemo inlining test cases More test cases for useMemo inlining, including the problematic case we found internally and some similar tricky cases with labels. --- .../compiler/useMemo-inverted-if.expect.md | 37 +++++++++++++ .../fixtures/compiler/useMemo-inverted-if.js | 12 ++++ .../compiler/useMemo-nested-ifs.expect.md | 28 ++++++++++ .../fixtures/compiler/useMemo-nested-ifs.js | 9 +++ .../compiler/useMemo-switch-return.expect.md | 55 +++++++++++++++++++ .../compiler/useMemo-switch-return.js | 19 +++++++ 6 files changed, 160 insertions(+) create mode 100644 compiler/forget/src/__tests__/fixtures/compiler/useMemo-inverted-if.expect.md create mode 100644 compiler/forget/src/__tests__/fixtures/compiler/useMemo-inverted-if.js create mode 100644 compiler/forget/src/__tests__/fixtures/compiler/useMemo-nested-ifs.expect.md create mode 100644 compiler/forget/src/__tests__/fixtures/compiler/useMemo-nested-ifs.js create mode 100644 compiler/forget/src/__tests__/fixtures/compiler/useMemo-switch-return.expect.md create mode 100644 compiler/forget/src/__tests__/fixtures/compiler/useMemo-switch-return.js diff --git a/compiler/forget/src/__tests__/fixtures/compiler/useMemo-inverted-if.expect.md b/compiler/forget/src/__tests__/fixtures/compiler/useMemo-inverted-if.expect.md new file mode 100644 index 0000000000..ebe949ec3b --- /dev/null +++ b/compiler/forget/src/__tests__/fixtures/compiler/useMemo-inverted-if.expect.md @@ -0,0 +1,37 @@ + +## Input + +```javascript +function Component(props) { + const x = useMemo(() => { + label: { + if (props.cond) { + break label; + } + return props.a; + } + return props.b; + }); + return x; +} + +``` + +## Code + +```javascript +function Component(props) { + let t17 = undefined; + bb10: { + if (props.cond) { + t17 = props.b; + break bb10; + } + t17 = props.a; + } + const x = t17; + return x; +} + +``` + \ No newline at end of file diff --git a/compiler/forget/src/__tests__/fixtures/compiler/useMemo-inverted-if.js b/compiler/forget/src/__tests__/fixtures/compiler/useMemo-inverted-if.js new file mode 100644 index 0000000000..62d00013e9 --- /dev/null +++ b/compiler/forget/src/__tests__/fixtures/compiler/useMemo-inverted-if.js @@ -0,0 +1,12 @@ +function Component(props) { + const x = useMemo(() => { + label: { + if (props.cond) { + break label; + } + return props.a; + } + return props.b; + }); + return x; +} diff --git a/compiler/forget/src/__tests__/fixtures/compiler/useMemo-nested-ifs.expect.md b/compiler/forget/src/__tests__/fixtures/compiler/useMemo-nested-ifs.expect.md new file mode 100644 index 0000000000..5b50c443a1 --- /dev/null +++ b/compiler/forget/src/__tests__/fixtures/compiler/useMemo-nested-ifs.expect.md @@ -0,0 +1,28 @@ + +## Input + +```javascript +function Component(props) { + const x = useMemo(() => { + if (props.cond) { + if (props.cond) { + } + } + }, [props.cond]); + return x; +} + +``` + +## Code + +```javascript +function Component(props) { + if (props.cond) { + if (props.cond) { + } + } +} + +``` + \ No newline at end of file diff --git a/compiler/forget/src/__tests__/fixtures/compiler/useMemo-nested-ifs.js b/compiler/forget/src/__tests__/fixtures/compiler/useMemo-nested-ifs.js new file mode 100644 index 0000000000..49b800b427 --- /dev/null +++ b/compiler/forget/src/__tests__/fixtures/compiler/useMemo-nested-ifs.js @@ -0,0 +1,9 @@ +function Component(props) { + const x = useMemo(() => { + if (props.cond) { + if (props.cond) { + } + } + }, [props.cond]); + return x; +} diff --git a/compiler/forget/src/__tests__/fixtures/compiler/useMemo-switch-return.expect.md b/compiler/forget/src/__tests__/fixtures/compiler/useMemo-switch-return.expect.md new file mode 100644 index 0000000000..0bd9903e03 --- /dev/null +++ b/compiler/forget/src/__tests__/fixtures/compiler/useMemo-switch-return.expect.md @@ -0,0 +1,55 @@ + +## Input + +```javascript +function Component(props) { + const x = useMemo(() => { + let y; + switch (props.switch) { + case "foo": { + return "foo"; + } + case "bar": { + y = "bar"; + break; + } + default: { + y = props.y; + } + } + return y; + }); + return x; +} + +``` + +## Code + +```javascript +function Component(props) { + let t22 = undefined; + bb10: { + let y = undefined; + bb2: switch (props.switch) { + case "foo": { + t22 = "foo"; + break bb10; + } + case "bar": { + y = "bar"; + break bb2; + } + default: { + y = props.y; + } + } + + t22 = y; + } + const x = t22; + return x; +} + +``` + \ No newline at end of file diff --git a/compiler/forget/src/__tests__/fixtures/compiler/useMemo-switch-return.js b/compiler/forget/src/__tests__/fixtures/compiler/useMemo-switch-return.js new file mode 100644 index 0000000000..59b564d1e9 --- /dev/null +++ b/compiler/forget/src/__tests__/fixtures/compiler/useMemo-switch-return.js @@ -0,0 +1,19 @@ +function Component(props) { + const x = useMemo(() => { + let y; + switch (props.switch) { + case "foo": { + return "foo"; + } + case "bar": { + y = "bar"; + break; + } + default: { + y = props.y; + } + } + return y; + }); + return x; +}