From 2dd8254b9b34d858109b919d7673e588bf1695c2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nicol=C3=B2=20Ribaudo?= Date: Fri, 16 Dec 2022 06:57:42 +0100 Subject: [PATCH] Fix tdz analysis for reassigned captured for bindings (#15278) --- .../src/validation.ts | 4 ++-- .../updated-for-binding-with-tdz-enabled/input.js | 4 ++++ .../updated-for-binding-with-tdz-enabled/options.json | 3 +++ .../updated-for-binding-with-tdz-enabled/output.js | 8 ++++++++ 4 files changed, 17 insertions(+), 2 deletions(-) create mode 100644 packages/babel-plugin-transform-block-scoping/test/fixtures/regression/updated-for-binding-with-tdz-enabled/input.js create mode 100644 packages/babel-plugin-transform-block-scoping/test/fixtures/regression/updated-for-binding-with-tdz-enabled/options.json create mode 100644 packages/babel-plugin-transform-block-scoping/test/fixtures/regression/updated-for-binding-with-tdz-enabled/output.js diff --git a/packages/babel-plugin-transform-block-scoping/src/validation.ts b/packages/babel-plugin-transform-block-scoping/src/validation.ts index bb48efa8a7eb..a811a074111c 100644 --- a/packages/babel-plugin-transform-block-scoping/src/validation.ts +++ b/packages/babel-plugin-transform-block-scoping/src/validation.ts @@ -131,9 +131,9 @@ function getTDZReplacement( if (skipTDZChecks.has(id)) return; skipTDZChecks.add(id); - const bindingPath = path.scope.getBinding(id.name).path; + const bindingPath = path.scope.getBinding(id.name)?.path; - if (bindingPath.isFunctionDeclaration()) return; + if (!bindingPath || bindingPath.isFunctionDeclaration()) return; const status = getTDZStatus(path, bindingPath); if (status === "outside") return; diff --git a/packages/babel-plugin-transform-block-scoping/test/fixtures/regression/updated-for-binding-with-tdz-enabled/input.js b/packages/babel-plugin-transform-block-scoping/test/fixtures/regression/updated-for-binding-with-tdz-enabled/input.js new file mode 100644 index 000000000000..3839d2e898d4 --- /dev/null +++ b/packages/babel-plugin-transform-block-scoping/test/fixtures/regression/updated-for-binding-with-tdz-enabled/input.js @@ -0,0 +1,4 @@ +for (let index = 0; index < 10; index++) { + index++; + () => index; +} diff --git a/packages/babel-plugin-transform-block-scoping/test/fixtures/regression/updated-for-binding-with-tdz-enabled/options.json b/packages/babel-plugin-transform-block-scoping/test/fixtures/regression/updated-for-binding-with-tdz-enabled/options.json new file mode 100644 index 000000000000..07942e513ebc --- /dev/null +++ b/packages/babel-plugin-transform-block-scoping/test/fixtures/regression/updated-for-binding-with-tdz-enabled/options.json @@ -0,0 +1,3 @@ +{ + "plugins": [["transform-block-scoping", { "tdz": true }]] +} diff --git a/packages/babel-plugin-transform-block-scoping/test/fixtures/regression/updated-for-binding-with-tdz-enabled/output.js b/packages/babel-plugin-transform-block-scoping/test/fixtures/regression/updated-for-binding-with-tdz-enabled/output.js new file mode 100644 index 000000000000..63d87bf22975 --- /dev/null +++ b/packages/babel-plugin-transform-block-scoping/test/fixtures/regression/updated-for-binding-with-tdz-enabled/output.js @@ -0,0 +1,8 @@ +var _loop = function (_index) { + _index++; + () => _index; + index = _index; +}; +for (var index = 0; index < 10; index++) { + _loop(index); +}