diff --git a/lib/6to5/templates/for-of.js b/lib/6to5/templates/for-of.js index 916c6c8eb6..096e2ada6d 100644 --- a/lib/6to5/templates/for-of.js +++ b/lib/6to5/templates/for-of.js @@ -1,3 +1,3 @@ for (var ITERATOR_KEY = OBJECT[Symbol.iterator](), STEP_KEY; !(STEP_KEY = ITERATOR_KEY.next()).done; ) { - var KEY = STEP_KEY.value; + } diff --git a/lib/6to5/transformers/for-of.js b/lib/6to5/transformers/for-of.js index 26f71b0700..0e24998be9 100644 --- a/lib/6to5/transformers/for-of.js +++ b/lib/6to5/transformers/for-of.js @@ -1,31 +1,34 @@ var util = require("../util"); +var b = require("ast-types").builders; exports.ForOfStatement = function (node, parent, opts, generateUid) { var left = node.left; - var key; + var declar; + + var stepKey = b.identifier(generateUid("step")); + var stepValueId = b.memberExpression(stepKey, b.identifier("value"), false); if (left.type === "Identifier") { - key = left; + declar = b.expressionStatement(b.assignmentExpression("=", left, stepValueId)); } else if (left.type === "VariableDeclaration") { - key = left.declarations[0].id; + declar = b.variableDeclaration(left.kind, [ + b.variableDeclarator(left.declarations[0].id, stepValueId) + ]); } else { return; } var node2 = util.template("for-of", { ITERATOR_KEY: generateUid("iterator"), - STEP_KEY: generateUid("step"), - OBJECT: node.right, - KEY: key + STEP_KEY: stepKey, + OBJECT: node.right }); util.ensureBlock(node); var block = node2.body; + block.body.push(declar); block.body = block.body.concat(node.body.body); - var declar = block.body[0]; - declar.kind = declar.kind; - return node2; }; diff --git a/test/fixtures/syntax/for-of/identifier/actual.js b/test/fixtures/syntax/for-of/identifier/actual.js new file mode 100644 index 0000000000..ddd15051ba --- /dev/null +++ b/test/fixtures/syntax/for-of/identifier/actual.js @@ -0,0 +1,3 @@ +for (i of arr) { + +} diff --git a/test/fixtures/syntax/for-of/identifier/expected.js b/test/fixtures/syntax/for-of/identifier/expected.js new file mode 100644 index 0000000000..24d6fbbd73 --- /dev/null +++ b/test/fixtures/syntax/for-of/identifier/expected.js @@ -0,0 +1,3 @@ +for (var _iterator = arr[Symbol.iterator](), _step; !(_step = _iterator.next()).done; ) { + i = _step.value; +}