diff --git a/src/babel/transformation/templates/for-of.js b/src/babel/transformation/templates/for-of.js index 096e2ada6d..3257fad723 100644 --- a/src/babel/transformation/templates/for-of.js +++ b/src/babel/transformation/templates/for-of.js @@ -1,3 +1,21 @@ -for (var ITERATOR_KEY = OBJECT[Symbol.iterator](), STEP_KEY; !(STEP_KEY = ITERATOR_KEY.next()).done; ) { +var ITERATOR_COMPLETION = true; +var ITERATOR_HAD_ERROR_KEY = false; +var ITERATOR_ERROR_KEY = undefined; +try { + for (var ITERATOR_KEY = OBJECT[Symbol.iterator](), STEP_KEY; !(ITERATOR_COMPLETION = (STEP_KEY = ITERATOR_KEY.next()).done); ITERATOR_COMPLETION = true) { + } +} catch (err) { + ITERATOR_HAD_ERROR_KEY = true; + ITERATOR_ERROR_KEY = err; +} finally { + try { + if (!ITERATOR_COMPLETION && ITERATOR_KEY.return) { + ITERATOR_KEY.return(); + } + } finally { + if (ITERATOR_HAD_ERROR_KEY) { + throw ITERATOR_ERROR_KEY; + } + } } diff --git a/src/babel/transformation/transformers/es6/for-of.js b/src/babel/transformation/transformers/es6/for-of.js index 39b4a0b448..ff0ebcac3f 100644 --- a/src/babel/transformation/transformers/es6/for-of.js +++ b/src/babel/transformation/transformers/es6/for-of.js @@ -32,7 +32,7 @@ exports.ForOfStatement = function (node, parent, scope, file) { // todo: find out why this is necessary? #538 loop._scopeInfo = node._scopeInfo; - return loop; + return build.node; }; var breakVisitor = { @@ -113,6 +113,7 @@ var loose = function (node, parent, scope, file) { return { declar: declar, + node: loop, loop: loop }; }; @@ -140,12 +141,18 @@ var spec = function (node, parent, scope, file) { var iteratorKey = scope.generateUidIdentifier("iterator"); - var loop = util.template("for-of", { - ITERATOR_KEY: iteratorKey, - STEP_KEY: stepKey, - OBJECT: node.right + var node = util.template("for-of", { + ITERATOR_HAD_ERROR_KEY: scope.generateUidIdentifier("didIteratorError"), + ITERATOR_COMPLETION: scope.generateUidIdentifier("iteratorNormalCompletion"), + ITERATOR_ERROR_KEY: scope.generateUidIdentifier("iteratorError"), + ITERATOR_KEY: iteratorKey, + STEP_KEY: stepKey, + OBJECT: node.right, + BODY: null }); + var loop = node[3].block.body[0]; + // scope.traverse(node, breakVisitor, { @@ -160,6 +167,7 @@ var spec = function (node, parent, scope, file) { return { declar: declar, - loop: loop + loop: loop, + node: node }; }; diff --git a/test/fixtures/transformation/es6-block-scoping/hoisting/expected.js b/test/fixtures/transformation/es6-block-scoping/hoisting/expected.js index 341a1f61a0..f8cec2e342 100644 --- a/test/fixtures/transformation/es6-block-scoping/hoisting/expected.js +++ b/test/fixtures/transformation/es6-block-scoping/hoisting/expected.js @@ -1,14 +1,33 @@ "use strict"; -for (var _iterator = [1, 2, 3][Symbol.iterator](), _step; !(_step = _iterator.next()).done;) { - var x; +var _iteratorNormalCompletion = true; +var _didIteratorError = false; +var _iteratorError = undefined; - (function () { - var i = _step.value; - x = 5; +try { + for (var _iterator = [1, 2, 3][Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) { + var x; - fns.push(function () { - return i * x; - }); - })(); -} + (function () { + var i = _step.value; + x = 5; + + fns.push(function () { + return i * x; + }); + })(); + } +} catch (err) { + _didIteratorError = true; + _iteratorError = err; +} finally { + try { + if (!_iteratorNormalCompletion && _iterator["return"]) { + _iterator["return"](); + } + } finally { + if (_didIteratorError) { + throw _iteratorError; + } + } +} \ No newline at end of file diff --git a/test/fixtures/transformation/es6-destructuring/for-of/expected.js b/test/fixtures/transformation/es6-destructuring/for-of/expected.js index fd33a1590e..b7e8a6bcf2 100644 --- a/test/fixtures/transformation/es6-destructuring/for-of/expected.js +++ b/test/fixtures/transformation/es6-destructuring/for-of/expected.js @@ -2,10 +2,29 @@ var _slicedToArray = function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { var _arr = []; for (var _iterator = arr[Symbol.iterator](), _step; !(_step = _iterator.next()).done;) { _arr.push(_step.value); if (i && _arr.length === i) break; } return _arr; } else { throw new TypeError("Invalid attempt to destructure non-iterable instance"); } }; -for (var _iterator = test.expectation.registers[Symbol.iterator](), _step; !(_step = _iterator.next()).done;) { - var _step$value = _slicedToArray(_step.value, 3); +var _iteratorNormalCompletion = true; +var _didIteratorError = false; +var _iteratorError = undefined; - var name = _step$value[0]; - var before = _step$value[1]; - var after = _step$value[2]; -} +try { + for (var _iterator = test.expectation.registers[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) { + var _step$value = _slicedToArray(_step.value, 3); + + var name = _step$value[0]; + var before = _step$value[1]; + var after = _step$value[2]; + } +} catch (err) { + _didIteratorError = true; + _iteratorError = err; +} finally { + try { + if (!_iteratorNormalCompletion && _iterator["return"]) { + _iterator["return"](); + } + } finally { + if (_didIteratorError) { + throw _iteratorError; + } + } +} \ No newline at end of file diff --git a/test/fixtures/transformation/es6-for-of/break/expected.js b/test/fixtures/transformation/es6-for-of/break/expected.js index fe7b0f9d20..f78c5ca7d2 100644 --- a/test/fixtures/transformation/es6-for-of/break/expected.js +++ b/test/fixtures/transformation/es6-for-of/break/expected.js @@ -2,44 +2,135 @@ // labels -foo: for (var _iterator = foo()[Symbol.iterator](), _step; !(_step = _iterator.next()).done;) { - var x = _step.value; +foo: { + var _iteratorNormalCompletion = true; + var _didIteratorError = false; + var _iteratorError = undefined; - while (true) { - if (_iterator["return"]) _iterator["return"](); + try { + for (var _iterator = foo()[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) { + var x = _step.value; - break foo; + while (true) { + break foo; + } + } + } catch (err) { + _didIteratorError = true; + _iteratorError = err; + } finally { + try { + if (!_iteratorNormalCompletion && _iterator["return"]) { + _iterator["return"](); + } + } finally { + if (_didIteratorError) { + throw _iteratorError; + } + } } -} +}foo: { + var _iteratorNormalCompletion2 = true; + var _didIteratorError2 = false; + var _iteratorError2 = undefined; -foo: for (var _iterator2 = foo()[Symbol.iterator](), _step2; !(_step2 = _iterator2.next()).done;) { - var x = _step2.value; + try { + for (var _iterator2 = foo()[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) { + var x = _step2.value; + + while (true) { + break; + } + } + } catch (err) { + _didIteratorError2 = true; + _iteratorError2 = err; + } finally { + try { + if (!_iteratorNormalCompletion2 && _iterator2["return"]) { + _iterator2["return"](); + } + } finally { + if (_didIteratorError2) { + throw _iteratorError2; + } + } + } +}foo: { + var _iteratorNormalCompletion3 = true; + var _didIteratorError3 = false; + var _iteratorError3 = undefined; + + try { + for (var _iterator3 = foo()[Symbol.iterator](), _step3; !(_iteratorNormalCompletion3 = (_step3 = _iterator3.next()).done); _iteratorNormalCompletion3 = true) { + var x = _step3.value; + + break foo; + } + } catch (err) { + _didIteratorError3 = true; + _iteratorError3 = err; + } finally { + try { + if (!_iteratorNormalCompletion3 && _iterator3["return"]) { + _iterator3["return"](); + } + } finally { + if (_didIteratorError3) { + throw _iteratorError3; + } + } + } +} // basic + +var _iteratorNormalCompletion4 = true; +var _didIteratorError4 = false; +var _iteratorError4 = undefined; + +try { + for (var _iterator4 = foo()[Symbol.iterator](), _step4; !(_iteratorNormalCompletion4 = (_step4 = _iterator4.next()).done); _iteratorNormalCompletion4 = true) { + var x = _step4.value; - while (true) { break; } -} - -foo: for (var _iterator3 = foo()[Symbol.iterator](), _step3; !(_step3 = _iterator3.next()).done;) { - var x = _step3.value; - if (_iterator3["return"]) _iterator3["return"](); - - break foo; -} - -// basic - -for (var _iterator4 = foo()[Symbol.iterator](), _step4; !(_step4 = _iterator4.next()).done;) { - var x = _step4.value; - if (_iterator4["return"]) _iterator4["return"](); - - break; -} - -for (var _iterator5 = foo()[Symbol.iterator](), _step5; !(_step5 = _iterator5.next()).done;) { - var x = _step5.value; - - while (true) { - break; +} catch (err) { + _didIteratorError4 = true; + _iteratorError4 = err; +} finally { + try { + if (!_iteratorNormalCompletion4 && _iterator4["return"]) { + _iterator4["return"](); + } + } finally { + if (_didIteratorError4) { + throw _iteratorError4; + } } } + +var _iteratorNormalCompletion5 = true; +var _didIteratorError5 = false; +var _iteratorError5 = undefined; + +try { + for (var _iterator5 = foo()[Symbol.iterator](), _step5; !(_iteratorNormalCompletion5 = (_step5 = _iterator5.next()).done); _iteratorNormalCompletion5 = true) { + var x = _step5.value; + + while (true) { + break; + } + } +} catch (err) { + _didIteratorError5 = true; + _iteratorError5 = err; +} finally { + try { + if (!_iteratorNormalCompletion5 && _iterator5["return"]) { + _iterator5["return"](); + } + } finally { + if (_didIteratorError5) { + throw _iteratorError5; + } + } +} \ No newline at end of file diff --git a/test/fixtures/transformation/es6-for-of/identifier/expected.js b/test/fixtures/transformation/es6-for-of/identifier/expected.js index 81521f5302..f1e75370dc 100644 --- a/test/fixtures/transformation/es6-for-of/identifier/expected.js +++ b/test/fixtures/transformation/es6-for-of/identifier/expected.js @@ -1,5 +1,24 @@ "use strict"; -for (var _iterator = arr[Symbol.iterator](), _step; !(_step = _iterator.next()).done;) { - i = _step.value; -} +var _iteratorNormalCompletion = true; +var _didIteratorError = false; +var _iteratorError = undefined; + +try { + for (var _iterator = arr[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) { + i = _step.value; + } +} catch (err) { + _didIteratorError = true; + _iteratorError = err; +} finally { + try { + if (!_iteratorNormalCompletion && _iterator["return"]) { + _iterator["return"](); + } + } finally { + if (_didIteratorError) { + throw _iteratorError; + } + } +} \ No newline at end of file diff --git a/test/fixtures/transformation/es6-for-of/let/expected.js b/test/fixtures/transformation/es6-for-of/let/expected.js index 0bfeba6d46..0b2ee2c402 100644 --- a/test/fixtures/transformation/es6-for-of/let/expected.js +++ b/test/fixtures/transformation/es6-for-of/let/expected.js @@ -1,5 +1,24 @@ "use strict"; -for (var _iterator = arr[Symbol.iterator](), _step; !(_step = _iterator.next()).done;) { - var i = _step.value; -} +var _iteratorNormalCompletion = true; +var _didIteratorError = false; +var _iteratorError = undefined; + +try { + for (var _iterator = arr[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) { + var i = _step.value; + } +} catch (err) { + _didIteratorError = true; + _iteratorError = err; +} finally { + try { + if (!_iteratorNormalCompletion && _iterator["return"]) { + _iterator["return"](); + } + } finally { + if (_didIteratorError) { + throw _iteratorError; + } + } +} \ No newline at end of file diff --git a/test/fixtures/transformation/es6-for-of/member-expression/expected.js b/test/fixtures/transformation/es6-for-of/member-expression/expected.js index ce935210fb..cf7ac1eee2 100644 --- a/test/fixtures/transformation/es6-for-of/member-expression/expected.js +++ b/test/fixtures/transformation/es6-for-of/member-expression/expected.js @@ -1,5 +1,24 @@ "use strict"; -for (var _iterator = arr[Symbol.iterator](), _step; !(_step = _iterator.next()).done;) { - obj.prop = _step.value; -} +var _iteratorNormalCompletion = true; +var _didIteratorError = false; +var _iteratorError = undefined; + +try { + for (var _iterator = arr[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) { + obj.prop = _step.value; + } +} catch (err) { + _didIteratorError = true; + _iteratorError = err; +} finally { + try { + if (!_iteratorNormalCompletion && _iterator["return"]) { + _iterator["return"](); + } + } finally { + if (_didIteratorError) { + throw _iteratorError; + } + } +} \ No newline at end of file diff --git a/test/fixtures/transformation/es6-for-of/multiple/expected.js b/test/fixtures/transformation/es6-for-of/multiple/expected.js index 9bfe6ca47e..77198f571c 100644 --- a/test/fixtures/transformation/es6-for-of/multiple/expected.js +++ b/test/fixtures/transformation/es6-for-of/multiple/expected.js @@ -1,9 +1,47 @@ "use strict"; -for (var _iterator = arr[Symbol.iterator](), _step; !(_step = _iterator.next()).done;) { - var i = _step.value; +var _iteratorNormalCompletion = true; +var _didIteratorError = false; +var _iteratorError = undefined; + +try { + for (var _iterator = arr[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) { + var i = _step.value; + } +} catch (err) { + _didIteratorError = true; + _iteratorError = err; +} finally { + try { + if (!_iteratorNormalCompletion && _iterator["return"]) { + _iterator["return"](); + } + } finally { + if (_didIteratorError) { + throw _iteratorError; + } + } } -for (var _iterator2 = numbers[Symbol.iterator](), _step2; !(_step2 = _iterator2.next()).done;) { - var i = _step2.value; -} +var _iteratorNormalCompletion2 = true; +var _didIteratorError2 = false; +var _iteratorError2 = undefined; + +try { + for (var _iterator2 = numbers[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) { + var i = _step2.value; + } +} catch (err) { + _didIteratorError2 = true; + _iteratorError2 = err; +} finally { + try { + if (!_iteratorNormalCompletion2 && _iterator2["return"]) { + _iterator2["return"](); + } + } finally { + if (_didIteratorError2) { + throw _iteratorError2; + } + } +} \ No newline at end of file diff --git a/test/fixtures/transformation/es6-for-of/var/expected.js b/test/fixtures/transformation/es6-for-of/var/expected.js index 0bfeba6d46..0b2ee2c402 100644 --- a/test/fixtures/transformation/es6-for-of/var/expected.js +++ b/test/fixtures/transformation/es6-for-of/var/expected.js @@ -1,5 +1,24 @@ "use strict"; -for (var _iterator = arr[Symbol.iterator](), _step; !(_step = _iterator.next()).done;) { - var i = _step.value; -} +var _iteratorNormalCompletion = true; +var _didIteratorError = false; +var _iteratorError = undefined; + +try { + for (var _iterator = arr[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) { + var i = _step.value; + } +} catch (err) { + _didIteratorError = true; + _iteratorError = err; +} finally { + try { + if (!_iteratorNormalCompletion && _iterator["return"]) { + _iterator["return"](); + } + } finally { + if (_didIteratorError) { + throw _iteratorError; + } + } +} \ No newline at end of file diff --git a/test/fixtures/transformation/es7-comprehensions/arguments/expected.js b/test/fixtures/transformation/es7-comprehensions/arguments/expected.js index 55b06801b2..610d5ef84b 100644 --- a/test/fixtures/transformation/es7-comprehensions/arguments/expected.js +++ b/test/fixtures/transformation/es7-comprehensions/arguments/expected.js @@ -5,15 +5,33 @@ function add() { return (function () { var _ref = []; + var _iteratorNormalCompletion = true; + var _didIteratorError = false; + var _iteratorError = undefined; - for (var _iterator = [1, 2, 3][Symbol.iterator](), _step; !(_step = _iterator.next()).done;) { - var i = _step.value; + try { + for (var _iterator = [1, 2, 3][Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) { + var i = _step.value; - _ref.push(i * _arguments[0]); + _ref.push(i * _arguments[0]); + } + } catch (err) { + _didIteratorError = true; + _iteratorError = err; + } finally { + try { + if (!_iteratorNormalCompletion && _iterator["return"]) { + _iterator["return"](); + } + } finally { + if (_didIteratorError) { + throw _iteratorError; + } + } } return _ref; })(); } -add(5); +add(5); \ No newline at end of file diff --git a/test/fixtures/transformation/es7-comprehensions/array-expression-single-if/expected.js b/test/fixtures/transformation/es7-comprehensions/array-expression-single-if/expected.js index 40fd64916f..e0815299e2 100644 --- a/test/fixtures/transformation/es7-comprehensions/array-expression-single-if/expected.js +++ b/test/fixtures/transformation/es7-comprehensions/array-expression-single-if/expected.js @@ -2,14 +2,32 @@ var arr = (function () { var _arr = []; + var _iteratorNormalCompletion = true; + var _didIteratorError = false; + var _iteratorError = undefined; - for (var _iterator = [1, 2, 3][Symbol.iterator](), _step; !(_step = _iterator.next()).done;) { - var i = _step.value; + try { + for (var _iterator = [1, 2, 3][Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) { + var i = _step.value; - if (i > 1) { - _arr.push(i * i); + if (i > 1) { + _arr.push(i * i); + } + } + } catch (err) { + _didIteratorError = true; + _iteratorError = err; + } finally { + try { + if (!_iteratorNormalCompletion && _iterator["return"]) { + _iterator["return"](); + } + } finally { + if (_didIteratorError) { + throw _iteratorError; + } } } return _arr; -})(); +})(); \ No newline at end of file diff --git a/test/fixtures/transformation/es7-comprehensions/array-expression-single/expected.js b/test/fixtures/transformation/es7-comprehensions/array-expression-single/expected.js index fe30ac0289..2ee858e713 100644 --- a/test/fixtures/transformation/es7-comprehensions/array-expression-single/expected.js +++ b/test/fixtures/transformation/es7-comprehensions/array-expression-single/expected.js @@ -2,12 +2,30 @@ var arr = (function () { var _arr = []; + var _iteratorNormalCompletion = true; + var _didIteratorError = false; + var _iteratorError = undefined; - for (var _iterator = [1, 2, 3][Symbol.iterator](), _step; !(_step = _iterator.next()).done;) { - var i = _step.value; + try { + for (var _iterator = [1, 2, 3][Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) { + var i = _step.value; - _arr.push(i * i); + _arr.push(i * i); + } + } catch (err) { + _didIteratorError = true; + _iteratorError = err; + } finally { + try { + if (!_iteratorNormalCompletion && _iterator["return"]) { + _iterator["return"](); + } + } finally { + if (_didIteratorError) { + throw _iteratorError; + } + } } return _arr; -})(); +})(); \ No newline at end of file diff --git a/test/fixtures/transformation/es7-comprehensions/array-multiple-if/expected.js b/test/fixtures/transformation/es7-comprehensions/array-multiple-if/expected.js index 39ea4c3311..1035cc83c7 100644 --- a/test/fixtures/transformation/es7-comprehensions/array-multiple-if/expected.js +++ b/test/fixtures/transformation/es7-comprehensions/array-multiple-if/expected.js @@ -2,18 +2,54 @@ var seattlers = (function () { var _seattlers = []; + var _iteratorNormalCompletion = true; + var _didIteratorError = false; + var _iteratorError = undefined; - for (var _iterator = countries[Symbol.iterator](), _step; !(_step = _iterator.next()).done;) { - var customers = _step.value; + try { + for (var _iterator = countries[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) { + var customers = _step.value; + var _iteratorNormalCompletion2 = true; + var _didIteratorError2 = false; + var _iteratorError2 = undefined; - for (var _iterator2 = customers[Symbol.iterator](), _step2; !(_step2 = _iterator2.next()).done;) { - var c = _step2.value; + try { + for (var _iterator2 = customers[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) { + var c = _step2.value; - if (c.city == "Seattle") { - _seattlers.push({ name: c.name, age: c.age }); + if (c.city == "Seattle") { + _seattlers.push({ name: c.name, age: c.age }); + } + } + } catch (err) { + _didIteratorError2 = true; + _iteratorError2 = err; + } finally { + try { + if (!_iteratorNormalCompletion2 && _iterator2["return"]) { + _iterator2["return"](); + } + } finally { + if (_didIteratorError2) { + throw _iteratorError2; + } + } + } + } + } catch (err) { + _didIteratorError = true; + _iteratorError = err; + } finally { + try { + if (!_iteratorNormalCompletion && _iterator["return"]) { + _iterator["return"](); + } + } finally { + if (_didIteratorError) { + throw _iteratorError; } } } return _seattlers; -})(); +})(); \ No newline at end of file diff --git a/test/fixtures/transformation/es7-comprehensions/array-multiple/expected.js b/test/fixtures/transformation/es7-comprehensions/array-multiple/expected.js index 87291a575d..edecba1445 100644 --- a/test/fixtures/transformation/es7-comprehensions/array-multiple/expected.js +++ b/test/fixtures/transformation/es7-comprehensions/array-multiple/expected.js @@ -2,16 +2,52 @@ var arr = (function () { var _arr = []; + var _iteratorNormalCompletion = true; + var _didIteratorError = false; + var _iteratorError = undefined; - for (var _iterator = "abcdefgh".split("")[Symbol.iterator](), _step; !(_step = _iterator.next()).done;) { - var x = _step.value; + try { + for (var _iterator = "abcdefgh".split("")[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) { + var x = _step.value; + var _iteratorNormalCompletion2 = true; + var _didIteratorError2 = false; + var _iteratorError2 = undefined; - for (var _iterator2 = "12345678".split("")[Symbol.iterator](), _step2; !(_step2 = _iterator2.next()).done;) { - var y = _step2.value; + try { + for (var _iterator2 = "12345678".split("")[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) { + var y = _step2.value; - _arr.push(x + y); + _arr.push(x + y); + } + } catch (err) { + _didIteratorError2 = true; + _iteratorError2 = err; + } finally { + try { + if (!_iteratorNormalCompletion2 && _iterator2["return"]) { + _iterator2["return"](); + } + } finally { + if (_didIteratorError2) { + throw _iteratorError2; + } + } + } + } + } catch (err) { + _didIteratorError = true; + _iteratorError = err; + } finally { + try { + if (!_iteratorNormalCompletion && _iterator["return"]) { + _iterator["return"](); + } + } finally { + if (_didIteratorError) { + throw _iteratorError; + } } } return _arr; -})(); +})(); \ No newline at end of file diff --git a/test/fixtures/transformation/es7-comprehensions/array-single-if/expected.js b/test/fixtures/transformation/es7-comprehensions/array-single-if/expected.js index 33b4263716..5c8a0bcdea 100644 --- a/test/fixtures/transformation/es7-comprehensions/array-single-if/expected.js +++ b/test/fixtures/transformation/es7-comprehensions/array-single-if/expected.js @@ -2,14 +2,32 @@ var arr = (function () { var _arr = []; + var _iteratorNormalCompletion = true; + var _didIteratorError = false; + var _iteratorError = undefined; - for (var _iterator = nums[Symbol.iterator](), _step; !(_step = _iterator.next()).done;) { - var i = _step.value; + try { + for (var _iterator = nums[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) { + var i = _step.value; - if (i > 1) { - _arr.push(i * i); + if (i > 1) { + _arr.push(i * i); + } + } + } catch (err) { + _didIteratorError = true; + _iteratorError = err; + } finally { + try { + if (!_iteratorNormalCompletion && _iterator["return"]) { + _iterator["return"](); + } + } finally { + if (_didIteratorError) { + throw _iteratorError; + } } } return _arr; -})(); +})(); \ No newline at end of file diff --git a/test/fixtures/transformation/es7-comprehensions/array-single/expected.js b/test/fixtures/transformation/es7-comprehensions/array-single/expected.js index b0bfaeeee9..730fc32af8 100644 --- a/test/fixtures/transformation/es7-comprehensions/array-single/expected.js +++ b/test/fixtures/transformation/es7-comprehensions/array-single/expected.js @@ -2,12 +2,30 @@ var arr = (function () { var _arr = []; + var _iteratorNormalCompletion = true; + var _didIteratorError = false; + var _iteratorError = undefined; - for (var _iterator = nums[Symbol.iterator](), _step; !(_step = _iterator.next()).done;) { - var i = _step.value; + try { + for (var _iterator = nums[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) { + var i = _step.value; - _arr.push(i * i); + _arr.push(i * i); + } + } catch (err) { + _didIteratorError = true; + _iteratorError = err; + } finally { + try { + if (!_iteratorNormalCompletion && _iterator["return"]) { + _iterator["return"](); + } + } finally { + if (_didIteratorError) { + throw _iteratorError; + } + } } return _arr; -})(); +})(); \ No newline at end of file diff --git a/test/fixtures/transformation/es7-comprehensions/array-this/expected.js b/test/fixtures/transformation/es7-comprehensions/array-this/expected.js index a03db14f50..5f7f52ab97 100644 --- a/test/fixtures/transformation/es7-comprehensions/array-this/expected.js +++ b/test/fixtures/transformation/es7-comprehensions/array-this/expected.js @@ -5,15 +5,33 @@ function add() { return (function () { var _ref = []; + var _iteratorNormalCompletion = true; + var _didIteratorError = false; + var _iteratorError = undefined; - for (var _iterator = [1, 2, 3][Symbol.iterator](), _step; !(_step = _iterator.next()).done;) { - var i = _step.value; + try { + for (var _iterator = [1, 2, 3][Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) { + var i = _step.value; - _ref.push(i * _this.multiplier); + _ref.push(i * _this.multiplier); + } + } catch (err) { + _didIteratorError = true; + _iteratorError = err; + } finally { + try { + if (!_iteratorNormalCompletion && _iterator["return"]) { + _iterator["return"](); + } + } finally { + if (_didIteratorError) { + throw _iteratorError; + } + } } return _ref; })(); } -add.call({ multiplier: 5 }); +add.call({ multiplier: 5 }); \ No newline at end of file diff --git a/test/fixtures/transformation/runtime/es6-for-of/expected.js b/test/fixtures/transformation/runtime/es6-for-of/expected.js index 328ac648d8..d12f90ca9d 100644 --- a/test/fixtures/transformation/runtime/es6-for-of/expected.js +++ b/test/fixtures/transformation/runtime/es6-for-of/expected.js @@ -2,6 +2,25 @@ var _core = require("babel-runtime/core-js")["default"]; -for (var _iterator = _core.$for.getIterator(arr), _step; !(_step = _iterator.next()).done;) { - var i = _step.value; -} +var _iteratorNormalCompletion = true; +var _didIteratorError = false; +var _iteratorError = undefined; + +try { + for (var _iterator = _core.$for.getIterator(arr), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) { + var i = _step.value; + } +} catch (err) { + _didIteratorError = true; + _iteratorError = err; +} finally { + try { + if (!_iteratorNormalCompletion && _iterator["return"]) { + _iterator["return"](); + } + } finally { + if (_didIteratorError) { + throw _iteratorError; + } + } +} \ No newline at end of file diff --git a/test/fixtures/transformation/runtime/es7-array-comprehensions/expected.js b/test/fixtures/transformation/runtime/es7-array-comprehensions/expected.js index f75b32e72d..5d1b3f6652 100644 --- a/test/fixtures/transformation/runtime/es7-array-comprehensions/expected.js +++ b/test/fixtures/transformation/runtime/es7-array-comprehensions/expected.js @@ -4,12 +4,30 @@ var _core = require("babel-runtime/core-js")["default"]; var arr = (function () { var _arr = []; + var _iteratorNormalCompletion = true; + var _didIteratorError = false; + var _iteratorError = undefined; - for (var _iterator = _core.$for.getIterator(nums), _step; !(_step = _iterator.next()).done;) { - var i = _step.value; + try { + for (var _iterator = _core.$for.getIterator(nums), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) { + var i = _step.value; - _arr.push(i * i); + _arr.push(i * i); + } + } catch (err) { + _didIteratorError = true; + _iteratorError = err; + } finally { + try { + if (!_iteratorNormalCompletion && _iterator["return"]) { + _iterator["return"](); + } + } finally { + if (_didIteratorError) { + throw _iteratorError; + } + } } return _arr; -})(); +})(); \ No newline at end of file