var util = require("../../util"); var t = require("../../types"); exports.ForOfStatement = function (node, parent, file, scope) { var left = node.left; var declar; var stepKey = file.generateUidIdentifier("step", scope); var stepValue = t.memberExpression(stepKey, t.identifier("value")); if (t.isIdentifier(left)) { declar = t.expressionStatement(t.assignmentExpression("=", left, stepValue)); } else if (t.isVariableDeclaration(left)) { declar = t.variableDeclaration(left.kind, [ t.variableDeclarator(left.declarations[0].id, stepValue) ]); } else { throw file.errorWithNode(left, "Unknown node type " + left.type + " in ForOfStatement"); } var node2 = util.template("for-of", { ITERATOR_KEY: file.generateUidIdentifier("iterator", scope), STEP_KEY: stepKey, OBJECT: node.right }); t.ensureBlock(node); var block = node2.body; block.body.push(declar); block.body = block.body.concat(node.body.body); return node2; };