From 58d2f41930859b5d46001e3ae365ffc09e5a8463 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nicol=C3=B2=20Ribaudo?= Date: Tue, 12 Jan 2021 19:19:15 +0100 Subject: [PATCH] Transform labeled `for-of` inside braceless `if` statement (#12611) --- .../babel-plugin-transform-for-of/src/index.js | 4 +++- .../input.js | 4 ++++ .../output.js | 15 +++++++++++++++ .../if-label-generic-iterable-12610/input.js | 4 ++++ .../if-label-generic-iterable-12610/output.js | 15 +++++++++++++++ 5 files changed, 41 insertions(+), 1 deletion(-) create mode 100644 packages/babel-plugin-transform-for-of/test/fixtures/regression/if-block-label-generic-iterable-12610/input.js create mode 100644 packages/babel-plugin-transform-for-of/test/fixtures/regression/if-block-label-generic-iterable-12610/output.js create mode 100644 packages/babel-plugin-transform-for-of/test/fixtures/regression/if-label-generic-iterable-12610/input.js create mode 100644 packages/babel-plugin-transform-for-of/test/fixtures/regression/if-label-generic-iterable-12610/output.js diff --git a/packages/babel-plugin-transform-for-of/src/index.js b/packages/babel-plugin-transform-for-of/src/index.js index 47d8169ab6..42b238aef0 100644 --- a/packages/babel-plugin-transform-for-of/src/index.js +++ b/packages/babel-plugin-transform-for-of/src/index.js @@ -227,7 +227,9 @@ export default declare((api, options) => { container[0] = t.labeledStatement(parent.label, container[0]); path.parentPath.replaceWithMultiple(nodes); - path.remove(); + + // The parent has been replaced, prevent Babel from traversing a detatched path + path.skip(); } else { path.replaceWithMultiple(nodes); } diff --git a/packages/babel-plugin-transform-for-of/test/fixtures/regression/if-block-label-generic-iterable-12610/input.js b/packages/babel-plugin-transform-for-of/test/fixtures/regression/if-block-label-generic-iterable-12610/input.js new file mode 100644 index 0000000000..05be22c53f --- /dev/null +++ b/packages/babel-plugin-transform-for-of/test/fixtures/regression/if-block-label-generic-iterable-12610/input.js @@ -0,0 +1,4 @@ +if (true) + actions: for (let x of y) { + continue actions + } diff --git a/packages/babel-plugin-transform-for-of/test/fixtures/regression/if-block-label-generic-iterable-12610/output.js b/packages/babel-plugin-transform-for-of/test/fixtures/regression/if-block-label-generic-iterable-12610/output.js new file mode 100644 index 0000000000..574a8f0e94 --- /dev/null +++ b/packages/babel-plugin-transform-for-of/test/fixtures/regression/if-block-label-generic-iterable-12610/output.js @@ -0,0 +1,15 @@ +if (true) { + var _iterator = babelHelpers.createForOfIteratorHelper(y), + _step; + + try { + actions: for (_iterator.s(); !(_step = _iterator.n()).done;) { + let x = _step.value; + continue actions; + } + } catch (err) { + _iterator.e(err); + } finally { + _iterator.f(); + } +} diff --git a/packages/babel-plugin-transform-for-of/test/fixtures/regression/if-label-generic-iterable-12610/input.js b/packages/babel-plugin-transform-for-of/test/fixtures/regression/if-label-generic-iterable-12610/input.js new file mode 100644 index 0000000000..05be22c53f --- /dev/null +++ b/packages/babel-plugin-transform-for-of/test/fixtures/regression/if-label-generic-iterable-12610/input.js @@ -0,0 +1,4 @@ +if (true) + actions: for (let x of y) { + continue actions + } diff --git a/packages/babel-plugin-transform-for-of/test/fixtures/regression/if-label-generic-iterable-12610/output.js b/packages/babel-plugin-transform-for-of/test/fixtures/regression/if-label-generic-iterable-12610/output.js new file mode 100644 index 0000000000..574a8f0e94 --- /dev/null +++ b/packages/babel-plugin-transform-for-of/test/fixtures/regression/if-label-generic-iterable-12610/output.js @@ -0,0 +1,15 @@ +if (true) { + var _iterator = babelHelpers.createForOfIteratorHelper(y), + _step; + + try { + actions: for (_iterator.s(); !(_step = _iterator.n()).done;) { + let x = _step.value; + continue actions; + } + } catch (err) { + _iterator.e(err); + } finally { + _iterator.f(); + } +}