From 575d0ccc026a0492a7501bf24334d4f597883f5d Mon Sep 17 00:00:00 2001 From: SuperSodaSea Date: Fri, 11 Nov 2022 02:21:43 +0800 Subject: [PATCH] Should call `return()` --- packages/babel-helpers/src/helpers.ts | 11 +++++----- .../destructuring/empty-array-pattern/exec.js | 21 +++++++++++++++---- .../empty-array-pattern/input.js | 12 +++++++++++ .../empty-array-pattern/output.js | 12 +++++++++++ .../test/fixtures/regression/T7199/output.js | 2 +- 5 files changed, 48 insertions(+), 10 deletions(-) diff --git a/packages/babel-helpers/src/helpers.ts b/packages/babel-helpers/src/helpers.ts index f2e8c4e25c55..b575fa478047 100644 --- a/packages/babel-helpers/src/helpers.ts +++ b/packages/babel-helpers/src/helpers.ts @@ -787,12 +787,13 @@ helpers.iterableToArrayLimit = helper("7.0.0-beta.0")` var _n = true; var _d = false; var _s, _e; - _i = _i.call(arr); - if (i === 0) { - if (typeof _i !== "object" && typeof _i !== "function") return; - return _arr; - } try { + _i = _i.call(arr); + if (i === 0) { + if (typeof _i !== "object" && typeof _i !== "function") return; + _n = false; + return _arr; + } for (; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; diff --git a/packages/babel-plugin-transform-destructuring/test/fixtures/destructuring/empty-array-pattern/exec.js b/packages/babel-plugin-transform-destructuring/test/fixtures/destructuring/empty-array-pattern/exec.js index 47ea91f838f0..3f6b5c2e87a1 100644 --- a/packages/babel-plugin-transform-destructuring/test/fixtures/destructuring/empty-array-pattern/exec.js +++ b/packages/babel-plugin-transform-destructuring/test/fixtures/destructuring/empty-array-pattern/exec.js @@ -1,17 +1,17 @@ expect(function () { - var [] = null; + var [] = null; }).toThrow("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); expect(function () { - var [] = 42; + var [] = 42; }).toThrow("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); expect(function () { - var [] = {}; + var [] = {}; }).toThrow("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); expect(function () { - var [] = { [Symbol.iterator]: function() {} }; + var [] = { [Symbol.iterator]: function() {} }; }).toThrow("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); var [] = []; @@ -21,3 +21,16 @@ var [] = (function*() { throw new Error("Should not throw"); })(); var [] = { [Symbol.iterator]: function() { return {}; } } var [] = { [Symbol.iterator]: function() { return function() {}; } } var [] = { [Symbol.iterator]: async function*() {} } + +var returnCalled = false; +var [] = { + [Symbol.iterator]: function() { + return { + return: function() { + returnCalled = true; + return {}; + } + }; + } +}; +expect(returnCalled).toStrictEqual(true); diff --git a/packages/babel-plugin-transform-destructuring/test/fixtures/destructuring/empty-array-pattern/input.js b/packages/babel-plugin-transform-destructuring/test/fixtures/destructuring/empty-array-pattern/input.js index a6f07a8ca18a..afc8822d7d13 100644 --- a/packages/babel-plugin-transform-destructuring/test/fixtures/destructuring/empty-array-pattern/input.js +++ b/packages/babel-plugin-transform-destructuring/test/fixtures/destructuring/empty-array-pattern/input.js @@ -10,3 +10,15 @@ var [] = (function*() { throw new Error("Should not throw"); })(); var [] = { [Symbol.iterator]: function() { return {}; } } var [] = { [Symbol.iterator]: function() { return function() {}; } } var [] = { [Symbol.iterator]: async function*() {} } + +var returnCalled = false; +var [] = { + [Symbol.iterator]: function() { + return { + return: function() { + returnCalled = true; + return {}; + } + }; + } +}; diff --git a/packages/babel-plugin-transform-destructuring/test/fixtures/destructuring/empty-array-pattern/output.js b/packages/babel-plugin-transform-destructuring/test/fixtures/destructuring/empty-array-pattern/output.js index 37ceff54e09f..8a7d98bbfe6b 100644 --- a/packages/babel-plugin-transform-destructuring/test/fixtures/destructuring/empty-array-pattern/output.js +++ b/packages/babel-plugin-transform-destructuring/test/fixtures/destructuring/empty-array-pattern/output.js @@ -51,3 +51,15 @@ var _Symbol$iterator7 = { }) }, _Symbol$iterator8 = babelHelpers.slicedToArray(_Symbol$iterator7, 0); +var returnCalled = false; +var _Symbol$iterator9 = { + [Symbol.iterator]: function () { + return { + return: function () { + returnCalled = true; + return {}; + } + }; + } + }, + _Symbol$iterator10 = babelHelpers.slicedToArray(_Symbol$iterator9, 0); diff --git a/packages/babel-plugin-transform-modules-commonjs/test/fixtures/regression/T7199/output.js b/packages/babel-plugin-transform-modules-commonjs/test/fixtures/regression/T7199/output.js index 51c1728a5ccb..545f82ba2d69 100644 --- a/packages/babel-plugin-transform-modules-commonjs/test/fixtures/regression/T7199/output.js +++ b/packages/babel-plugin-transform-modules-commonjs/test/fixtures/regression/T7199/output.js @@ -6,7 +6,7 @@ function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArra function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); } function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; } -function _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; _i = _i.call(arr); if (i === 0) { if (typeof _i !== "object" && typeof _i !== "function") return; return _arr; } try { for (; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } +function _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { _i = _i.call(arr); if (i === 0) { if (typeof _i !== "object" && typeof _i !== "function") return; _n = false; return _arr; } for (; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; } const _bar = bar, _bar2 = _slicedToArray(_bar, 1),