From a6b3adbe68b0ee1e50fd4f0d632e5e1ce60dedcd Mon Sep 17 00:00:00 2001 From: Joe Savona Date: Thu, 21 Mar 2024 14:11:06 -0700 Subject: [PATCH] Repro for unsupported recursive function expressions --- ...do-recursive-function-expression.expect.md | 30 ++++++++++++++ ...rror.todo-recursive-function-expression.js | 9 +++++ .../recursive-function-expr.expect.md | 19 --------- .../compiler/recursive-function-expr.js | 3 -- .../compiler/recursive-function.expect.md | 39 +++++++++++++++++++ .../fixtures/compiler/recursive-function.js | 11 ++++++ 6 files changed, 89 insertions(+), 22 deletions(-) create mode 100644 compiler/packages/babel-plugin-react-forget/src/__tests__/fixtures/compiler/error.todo-recursive-function-expression.expect.md create mode 100644 compiler/packages/babel-plugin-react-forget/src/__tests__/fixtures/compiler/error.todo-recursive-function-expression.js delete mode 100644 compiler/packages/babel-plugin-react-forget/src/__tests__/fixtures/compiler/recursive-function-expr.expect.md delete mode 100644 compiler/packages/babel-plugin-react-forget/src/__tests__/fixtures/compiler/recursive-function-expr.js create mode 100644 compiler/packages/babel-plugin-react-forget/src/__tests__/fixtures/compiler/recursive-function.expect.md create mode 100644 compiler/packages/babel-plugin-react-forget/src/__tests__/fixtures/compiler/recursive-function.js diff --git a/compiler/packages/babel-plugin-react-forget/src/__tests__/fixtures/compiler/error.todo-recursive-function-expression.expect.md b/compiler/packages/babel-plugin-react-forget/src/__tests__/fixtures/compiler/error.todo-recursive-function-expression.expect.md new file mode 100644 index 0000000000..98588f3b5c --- /dev/null +++ b/compiler/packages/babel-plugin-react-forget/src/__tests__/fixtures/compiler/error.todo-recursive-function-expression.expect.md @@ -0,0 +1,30 @@ + +## Input + +```javascript +function Component() { + function callback(x) { + if (x == 0) { + return null; + } + return callback(x - 1); + } + return callback(10); +} + +``` + + +## Error + +``` + 4 | return null; + 5 | } +> 6 | return callback(x - 1); + | ^^^^^^^^^^^^^^^ [ReactForget] Todo: Unsupported declaration type for hoisting. variable "callback" declared with FunctionDeclaration (6:6) + 7 | } + 8 | return callback(10); + 9 | } +``` + + \ No newline at end of file diff --git a/compiler/packages/babel-plugin-react-forget/src/__tests__/fixtures/compiler/error.todo-recursive-function-expression.js b/compiler/packages/babel-plugin-react-forget/src/__tests__/fixtures/compiler/error.todo-recursive-function-expression.js new file mode 100644 index 0000000000..f1b95e5105 --- /dev/null +++ b/compiler/packages/babel-plugin-react-forget/src/__tests__/fixtures/compiler/error.todo-recursive-function-expression.js @@ -0,0 +1,9 @@ +function Component() { + function callback(x) { + if (x == 0) { + return null; + } + return callback(x - 1); + } + return callback(10); +} diff --git a/compiler/packages/babel-plugin-react-forget/src/__tests__/fixtures/compiler/recursive-function-expr.expect.md b/compiler/packages/babel-plugin-react-forget/src/__tests__/fixtures/compiler/recursive-function-expr.expect.md deleted file mode 100644 index 2d931d03fb..0000000000 --- a/compiler/packages/babel-plugin-react-forget/src/__tests__/fixtures/compiler/recursive-function-expr.expect.md +++ /dev/null @@ -1,19 +0,0 @@ - -## Input - -```javascript -function foo() { - (() => foo())(); -} - -``` - -## Code - -```javascript -function foo() { - foo(); -} - -``` - \ No newline at end of file diff --git a/compiler/packages/babel-plugin-react-forget/src/__tests__/fixtures/compiler/recursive-function-expr.js b/compiler/packages/babel-plugin-react-forget/src/__tests__/fixtures/compiler/recursive-function-expr.js deleted file mode 100644 index fcd835a0fa..0000000000 --- a/compiler/packages/babel-plugin-react-forget/src/__tests__/fixtures/compiler/recursive-function-expr.js +++ /dev/null @@ -1,3 +0,0 @@ -function foo() { - (() => foo())(); -} diff --git a/compiler/packages/babel-plugin-react-forget/src/__tests__/fixtures/compiler/recursive-function.expect.md b/compiler/packages/babel-plugin-react-forget/src/__tests__/fixtures/compiler/recursive-function.expect.md new file mode 100644 index 0000000000..023e129625 --- /dev/null +++ b/compiler/packages/babel-plugin-react-forget/src/__tests__/fixtures/compiler/recursive-function.expect.md @@ -0,0 +1,39 @@ + +## Input + +```javascript +function foo(x) { + if (x <= 0) { + return 0; + } + return x + foo(x - 1) + (() => foo(x - 2))(); +} + +export const FIXTURE_ENTRYPOINT = { + fn: foo, + params: [10], +}; + +``` + +## Code + +```javascript +function foo(x) { + if (x <= 0) { + return 0; + } + let t0; + t0 = foo(x - 2); + return x + foo(x - 1) + t0; +} + +export const FIXTURE_ENTRYPOINT = { + fn: foo, + params: [10], +}; + +``` + +### Eval output +(kind: ok) 364 \ No newline at end of file diff --git a/compiler/packages/babel-plugin-react-forget/src/__tests__/fixtures/compiler/recursive-function.js b/compiler/packages/babel-plugin-react-forget/src/__tests__/fixtures/compiler/recursive-function.js new file mode 100644 index 0000000000..cfc5ee6cc5 --- /dev/null +++ b/compiler/packages/babel-plugin-react-forget/src/__tests__/fixtures/compiler/recursive-function.js @@ -0,0 +1,11 @@ +function foo(x) { + if (x <= 0) { + return 0; + } + return x + foo(x - 1) + (() => foo(x - 2))(); +} + +export const FIXTURE_ENTRYPOINT = { + fn: foo, + params: [10], +};