From b2b3d7944af9f91ed0dad956ddd2ee6fce20b2bf Mon Sep 17 00:00:00 2001 From: Artem Yavorsky Date: Mon, 28 Aug 2017 22:39:02 +0300 Subject: [PATCH] Spec compatibility for iteratorClose condition. (#6094) * for-of: IteratorClose spec compatibility. See #3: https://tc39.github.io/ecma262/#sec-iteratorclose * Update spec fixtures for for-of. * Fix IteratorClose case for remap-async-to-generator. * Fix IteratorClose case for async-generator-function test output. * Modify few tests according to iteratorClose fix. * Fix iteratorClose for helpers.slicedToArray also. * Update iteratorClose fixture for commonjs. --- .../babel-helper-remap-async-to-generator/src/for-await.js | 2 +- packages/babel-helpers/src/helpers.js | 2 +- .../test/fixtures/for-await/async-arrow/expected.js | 2 +- .../test/fixtures/for-await/async-function/expected.js | 2 +- .../test/fixtures/for-await/async-generator/expected.js | 2 +- .../test/fixtures/for-await/destructuring/expected.js | 2 +- .../test/fixtures/regression/5880/expected.js | 2 +- .../test/fixtures/general/hoisting/expected.js | 2 +- packages/babel-plugin-transform-es2015-for-of/README.md | 2 +- packages/babel-plugin-transform-es2015-for-of/src/index.js | 2 +- .../test/fixtures/opt/typeannotation/expected.js | 2 +- .../regression/label-object-with-comment-4995/expected.js | 2 +- .../test/fixtures/spec/identifier/expected.js | 2 +- .../test/fixtures/spec/ignore-cases/expected.js | 2 +- .../test/fixtures/spec/let/expected.js | 2 +- .../test/fixtures/spec/member-expression/expected.js | 2 +- .../test/fixtures/spec/multiple/expected.js | 4 ++-- .../test/fixtures/spec/nested-label-for-of/expected.js | 4 ++-- .../test/fixtures/spec/var/expected.js | 2 +- .../test/fixtures/regression/T7199/expected.js | 2 +- .../rest-member-expression-deoptimisation/expected.js | 2 +- .../test/fixtures/runtime/es6-for-of/expected.js | 2 +- .../test/fixtures/preset-options/6025/expected.js | 2 +- 23 files changed, 25 insertions(+), 25 deletions(-) diff --git a/packages/babel-helper-remap-async-to-generator/src/for-await.js b/packages/babel-helper-remap-async-to-generator/src/for-await.js index 398ce6fb02..8301045ebf 100644 --- a/packages/babel-helper-remap-async-to-generator/src/for-await.js +++ b/packages/babel-helper-remap-async-to-generator/src/for-await.js @@ -22,7 +22,7 @@ const awaitTemplate = ` ITERATOR_ERROR_KEY = err; } finally { try { - if (!ITERATOR_COMPLETION && ITERATOR_KEY.return) { + if (!ITERATOR_COMPLETION && ITERATOR_KEY.return != null) { yield AWAIT(ITERATOR_KEY.return()); } } finally { diff --git a/packages/babel-helpers/src/helpers.js b/packages/babel-helpers/src/helpers.js index 69cd1f8179..010c3c75f4 100644 --- a/packages/babel-helpers/src/helpers.js +++ b/packages/babel-helpers/src/helpers.js @@ -542,7 +542,7 @@ helpers.slicedToArray = template(` _e = err; } finally { try { - if (!_n && _i["return"]) _i["return"](); + if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } diff --git a/packages/babel-plugin-transform-async-generator-functions/test/fixtures/for-await/async-arrow/expected.js b/packages/babel-plugin-transform-async-generator-functions/test/fixtures/for-await/async-arrow/expected.js index 3023bac6e6..4ec63d6ebb 100644 --- a/packages/babel-plugin-transform-async-generator-functions/test/fixtures/for-await/async-arrow/expected.js +++ b/packages/babel-plugin-transform-async-generator-functions/test/fixtures/for-await/async-arrow/expected.js @@ -13,7 +13,7 @@ babelHelpers.asyncToGenerator(function* () { _iteratorError = err; } finally { try { - if (!_iteratorNormalCompletion && _iterator.return) { + if (!_iteratorNormalCompletion && _iterator.return != null) { yield _iterator.return(); } } finally { diff --git a/packages/babel-plugin-transform-async-generator-functions/test/fixtures/for-await/async-function/expected.js b/packages/babel-plugin-transform-async-generator-functions/test/fixtures/for-await/async-function/expected.js index 688e646c5f..8ab693b63a 100644 --- a/packages/babel-plugin-transform-async-generator-functions/test/fixtures/for-await/async-function/expected.js +++ b/packages/babel-plugin-transform-async-generator-functions/test/fixtures/for-await/async-function/expected.js @@ -14,7 +14,7 @@ let f = (() => { _iteratorError = err; } finally { try { - if (!_iteratorNormalCompletion && _iterator.return) { + if (!_iteratorNormalCompletion && _iterator.return != null) { yield _iterator.return(); } } finally { diff --git a/packages/babel-plugin-transform-async-generator-functions/test/fixtures/for-await/async-generator/expected.js b/packages/babel-plugin-transform-async-generator-functions/test/fixtures/for-await/async-generator/expected.js index 16c61c2065..0b9406b0f0 100644 --- a/packages/babel-plugin-transform-async-generator-functions/test/fixtures/for-await/async-generator/expected.js +++ b/packages/babel-plugin-transform-async-generator-functions/test/fixtures/for-await/async-generator/expected.js @@ -14,7 +14,7 @@ let g = (() => { _iteratorError = err; } finally { try { - if (!_iteratorNormalCompletion && _iterator.return) { + if (!_iteratorNormalCompletion && _iterator.return != null) { yield babelHelpers.asyncGenerator.await(_iterator.return()); } } finally { diff --git a/packages/babel-plugin-transform-async-generator-functions/test/fixtures/for-await/destructuring/expected.js b/packages/babel-plugin-transform-async-generator-functions/test/fixtures/for-await/destructuring/expected.js index a52e6df8c8..c7c30d7a01 100644 --- a/packages/babel-plugin-transform-async-generator-functions/test/fixtures/for-await/destructuring/expected.js +++ b/packages/babel-plugin-transform-async-generator-functions/test/fixtures/for-await/destructuring/expected.js @@ -17,7 +17,7 @@ let f = (() => { _iteratorError = err; } finally { try { - if (!_iteratorNormalCompletion && _iterator.return) { + if (!_iteratorNormalCompletion && _iterator.return != null) { yield _iterator.return(); } } finally { diff --git a/packages/babel-plugin-transform-async-to-generator/test/fixtures/regression/5880/expected.js b/packages/babel-plugin-transform-async-to-generator/test/fixtures/regression/5880/expected.js index 6f1a3b8103..06fd61769f 100644 --- a/packages/babel-plugin-transform-async-to-generator/test/fixtures/regression/5880/expected.js +++ b/packages/babel-plugin-transform-async-to-generator/test/fixtures/regression/5880/expected.js @@ -14,7 +14,7 @@ babelHelpers.asyncToGenerator(function* () { _iteratorError = err; } finally { try { - if (!_iteratorNormalCompletion && _iterator.return) { + if (!_iteratorNormalCompletion && _iterator.return != null) { yield _iterator.return(); } } finally { diff --git a/packages/babel-plugin-transform-es2015-block-scoping/test/fixtures/general/hoisting/expected.js b/packages/babel-plugin-transform-es2015-block-scoping/test/fixtures/general/hoisting/expected.js index 0b806ea34b..0562fd1fe6 100644 --- a/packages/babel-plugin-transform-es2015-block-scoping/test/fixtures/general/hoisting/expected.js +++ b/packages/babel-plugin-transform-es2015-block-scoping/test/fixtures/general/hoisting/expected.js @@ -27,7 +27,7 @@ try { _iteratorError = err; } finally { try { - if (!_iteratorNormalCompletion && _iterator.return) { + if (!_iteratorNormalCompletion && _iterator.return != null) { _iterator.return(); } } finally { diff --git a/packages/babel-plugin-transform-es2015-for-of/README.md b/packages/babel-plugin-transform-es2015-for-of/README.md index 3e9efe20d9..24fe5581a2 100644 --- a/packages/babel-plugin-transform-es2015-for-of/README.md +++ b/packages/babel-plugin-transform-es2015-for-of/README.md @@ -26,7 +26,7 @@ try { _iteratorError = err; } finally { try { - if (!_iteratorNormalCompletion && _iterator.return) { + if (!_iteratorNormalCompletion && _iterator.return != null) { _iterator.return(); } } finally { diff --git a/packages/babel-plugin-transform-es2015-for-of/src/index.js b/packages/babel-plugin-transform-es2015-for-of/src/index.js index 5a71657b0c..a89e30b277 100644 --- a/packages/babel-plugin-transform-es2015-for-of/src/index.js +++ b/packages/babel-plugin-transform-es2015-for-of/src/index.js @@ -33,7 +33,7 @@ export default function({ messages, template, types: t }) { ITERATOR_ERROR_KEY = err; } finally { try { - if (!ITERATOR_COMPLETION && ITERATOR_KEY.return) { + if (!ITERATOR_COMPLETION && ITERATOR_KEY.return != null) { ITERATOR_KEY.return(); } } finally { diff --git a/packages/babel-plugin-transform-es2015-for-of/test/fixtures/opt/typeannotation/expected.js b/packages/babel-plugin-transform-es2015-for-of/test/fixtures/opt/typeannotation/expected.js index 75bcd1cd9a..04108bdc79 100644 --- a/packages/babel-plugin-transform-es2015-for-of/test/fixtures/opt/typeannotation/expected.js +++ b/packages/babel-plugin-transform-es2015-for-of/test/fixtures/opt/typeannotation/expected.js @@ -18,7 +18,7 @@ function a(b) { _iteratorError = err; } finally { try { - if (!_iteratorNormalCompletion && _iterator.return) { + if (!_iteratorNormalCompletion && _iterator.return != null) { _iterator.return(); } } finally { diff --git a/packages/babel-plugin-transform-es2015-for-of/test/fixtures/regression/label-object-with-comment-4995/expected.js b/packages/babel-plugin-transform-es2015-for-of/test/fixtures/regression/label-object-with-comment-4995/expected.js index 6781fc851d..6350ca6bee 100644 --- a/packages/babel-plugin-transform-es2015-for-of/test/fixtures/regression/label-object-with-comment-4995/expected.js +++ b/packages/babel-plugin-transform-es2015-for-of/test/fixtures/regression/label-object-with-comment-4995/expected.js @@ -13,7 +13,7 @@ try { _iteratorError = err; } finally { try { - if (!_iteratorNormalCompletion && _iterator.return) { + if (!_iteratorNormalCompletion && _iterator.return != null) { _iterator.return(); } } finally { diff --git a/packages/babel-plugin-transform-es2015-for-of/test/fixtures/spec/identifier/expected.js b/packages/babel-plugin-transform-es2015-for-of/test/fixtures/spec/identifier/expected.js index a3d54af48f..a8f3a57a58 100644 --- a/packages/babel-plugin-transform-es2015-for-of/test/fixtures/spec/identifier/expected.js +++ b/packages/babel-plugin-transform-es2015-for-of/test/fixtures/spec/identifier/expected.js @@ -11,7 +11,7 @@ try { _iteratorError = err; } finally { try { - if (!_iteratorNormalCompletion && _iterator.return) { + if (!_iteratorNormalCompletion && _iterator.return != null) { _iterator.return(); } } finally { diff --git a/packages/babel-plugin-transform-es2015-for-of/test/fixtures/spec/ignore-cases/expected.js b/packages/babel-plugin-transform-es2015-for-of/test/fixtures/spec/ignore-cases/expected.js index dcd4320b80..908af15f61 100644 --- a/packages/babel-plugin-transform-es2015-for-of/test/fixtures/spec/ignore-cases/expected.js +++ b/packages/babel-plugin-transform-es2015-for-of/test/fixtures/spec/ignore-cases/expected.js @@ -16,7 +16,7 @@ try { _iteratorError = err; } finally { try { - if (!_iteratorNormalCompletion && _iterator.return) { + if (!_iteratorNormalCompletion && _iterator.return != null) { _iterator.return(); } } finally { diff --git a/packages/babel-plugin-transform-es2015-for-of/test/fixtures/spec/let/expected.js b/packages/babel-plugin-transform-es2015-for-of/test/fixtures/spec/let/expected.js index fb997e23ad..2dbda90cd9 100644 --- a/packages/babel-plugin-transform-es2015-for-of/test/fixtures/spec/let/expected.js +++ b/packages/babel-plugin-transform-es2015-for-of/test/fixtures/spec/let/expected.js @@ -11,7 +11,7 @@ try { _iteratorError = err; } finally { try { - if (!_iteratorNormalCompletion && _iterator.return) { + if (!_iteratorNormalCompletion && _iterator.return != null) { _iterator.return(); } } finally { diff --git a/packages/babel-plugin-transform-es2015-for-of/test/fixtures/spec/member-expression/expected.js b/packages/babel-plugin-transform-es2015-for-of/test/fixtures/spec/member-expression/expected.js index af5bbbb407..ffe31ebc3c 100644 --- a/packages/babel-plugin-transform-es2015-for-of/test/fixtures/spec/member-expression/expected.js +++ b/packages/babel-plugin-transform-es2015-for-of/test/fixtures/spec/member-expression/expected.js @@ -11,7 +11,7 @@ try { _iteratorError = err; } finally { try { - if (!_iteratorNormalCompletion && _iterator.return) { + if (!_iteratorNormalCompletion && _iterator.return != null) { _iterator.return(); } } finally { diff --git a/packages/babel-plugin-transform-es2015-for-of/test/fixtures/spec/multiple/expected.js b/packages/babel-plugin-transform-es2015-for-of/test/fixtures/spec/multiple/expected.js index a3568407fe..d467fabeb6 100644 --- a/packages/babel-plugin-transform-es2015-for-of/test/fixtures/spec/multiple/expected.js +++ b/packages/babel-plugin-transform-es2015-for-of/test/fixtures/spec/multiple/expected.js @@ -11,7 +11,7 @@ try { _iteratorError = err; } finally { try { - if (!_iteratorNormalCompletion && _iterator.return) { + if (!_iteratorNormalCompletion && _iterator.return != null) { _iterator.return(); } } finally { @@ -34,7 +34,7 @@ try { _iteratorError2 = err; } finally { try { - if (!_iteratorNormalCompletion2 && _iterator2.return) { + if (!_iteratorNormalCompletion2 && _iterator2.return != null) { _iterator2.return(); } } finally { diff --git a/packages/babel-plugin-transform-es2015-for-of/test/fixtures/spec/nested-label-for-of/expected.js b/packages/babel-plugin-transform-es2015-for-of/test/fixtures/spec/nested-label-for-of/expected.js index d7517b8723..95b8cc5472 100644 --- a/packages/babel-plugin-transform-es2015-for-of/test/fixtures/spec/nested-label-for-of/expected.js +++ b/packages/babel-plugin-transform-es2015-for-of/test/fixtures/spec/nested-label-for-of/expected.js @@ -19,7 +19,7 @@ try { _iteratorError2 = err; } finally { try { - if (!_iteratorNormalCompletion2 && _iterator2.return) { + if (!_iteratorNormalCompletion2 && _iterator2.return != null) { _iterator2.return(); } } finally { @@ -34,7 +34,7 @@ try { _iteratorError = err; } finally { try { - if (!_iteratorNormalCompletion && _iterator.return) { + if (!_iteratorNormalCompletion && _iterator.return != null) { _iterator.return(); } } finally { diff --git a/packages/babel-plugin-transform-es2015-for-of/test/fixtures/spec/var/expected.js b/packages/babel-plugin-transform-es2015-for-of/test/fixtures/spec/var/expected.js index 70fa6471db..ec97a710ae 100644 --- a/packages/babel-plugin-transform-es2015-for-of/test/fixtures/spec/var/expected.js +++ b/packages/babel-plugin-transform-es2015-for-of/test/fixtures/spec/var/expected.js @@ -11,7 +11,7 @@ try { _iteratorError = err; } finally { try { - if (!_iteratorNormalCompletion && _iterator.return) { + if (!_iteratorNormalCompletion && _iterator.return != null) { _iterator.return(); } } finally { diff --git a/packages/babel-plugin-transform-es2015-modules-commonjs/test/fixtures/regression/T7199/expected.js b/packages/babel-plugin-transform-es2015-modules-commonjs/test/fixtures/regression/T7199/expected.js index ccdd0e5940..defefddc57 100644 --- a/packages/babel-plugin-transform-es2015-modules-commonjs/test/fixtures/regression/T7199/expected.js +++ b/packages/babel-plugin-transform-es2015-modules-commonjs/test/fixtures/regression/T7199/expected.js @@ -1,6 +1,6 @@ "use strict"; -var _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_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"]) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError("Invalid attempt to destructure non-iterable instance"); } }; }(); +var _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_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; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError("Invalid attempt to destructure non-iterable instance"); } }; }(); var _foo = require("foo"); diff --git a/packages/babel-plugin-transform-es2015-parameters/test/fixtures/parameters/rest-member-expression-deoptimisation/expected.js b/packages/babel-plugin-transform-es2015-parameters/test/fixtures/parameters/rest-member-expression-deoptimisation/expected.js index 363a1506b4..9c5fe01993 100644 --- a/packages/babel-plugin-transform-es2015-parameters/test/fixtures/parameters/rest-member-expression-deoptimisation/expected.js +++ b/packages/babel-plugin-transform-es2015-parameters/test/fixtures/parameters/rest-member-expression-deoptimisation/expected.js @@ -164,7 +164,7 @@ function forOf() { _iteratorError = err; } finally { try { - if (!_iteratorNormalCompletion && _iterator.return) { + if (!_iteratorNormalCompletion && _iterator.return != null) { _iterator.return(); } } finally { diff --git a/packages/babel-plugin-transform-runtime/test/fixtures/runtime/es6-for-of/expected.js b/packages/babel-plugin-transform-runtime/test/fixtures/runtime/es6-for-of/expected.js index 6ad474d512..838e15fd3d 100644 --- a/packages/babel-plugin-transform-runtime/test/fixtures/runtime/es6-for-of/expected.js +++ b/packages/babel-plugin-transform-runtime/test/fixtures/runtime/es6-for-of/expected.js @@ -12,7 +12,7 @@ try { _iteratorError = err; } finally { try { - if (!_iteratorNormalCompletion && _iterator.return) { + if (!_iteratorNormalCompletion && _iterator.return != null) { _iterator.return(); } } finally { diff --git a/packages/babel-preset-es2015/test/fixtures/preset-options/6025/expected.js b/packages/babel-preset-es2015/test/fixtures/preset-options/6025/expected.js index 798a5ae27b..c176362e56 100644 --- a/packages/babel-preset-es2015/test/fixtures/preset-options/6025/expected.js +++ b/packages/babel-preset-es2015/test/fixtures/preset-options/6025/expected.js @@ -21,7 +21,7 @@ try { _iteratorError = err; } finally { try { - if (!_iteratorNormalCompletion && _iterator.return) { + if (!_iteratorNormalCompletion && _iterator.return != null) { _iterator.return(); } } finally {