40 lines
910 B
JavaScript
40 lines
910 B
JavaScript
var util = require("../util");
|
|
var b = require("ast-types").builders;
|
|
|
|
exports.ForOfStatement = function (node, parent, opts, generateUid) {
|
|
var declar;
|
|
var isPattern = false;
|
|
|
|
var key;
|
|
if (node.left.type === "VariableDeclaration") {
|
|
declar = node.left;
|
|
key = declar.declarations[0].id;
|
|
} else {
|
|
isPattern = true;
|
|
declar = node.left[0];
|
|
key = b.identifier(generateUid("ref"));
|
|
}
|
|
|
|
var node2 = util.template("for-of", {
|
|
ITERATOR_KEY: generateUid("iterator"),
|
|
STEP_KEY: generateUid("step"),
|
|
OBJECT: node.right,
|
|
KEY: key
|
|
});
|
|
|
|
var block = node2.body;
|
|
|
|
if (isPattern) {
|
|
block.body.push(b.variableDeclaration(declar.kind, [
|
|
b.variableDeclarator(declar.declarations[0].id, key)
|
|
]));
|
|
}
|
|
|
|
block.body = block.body.concat(node.body.body || []);
|
|
|
|
var declar = block.body[0];
|
|
declar.kind = declar.kind;
|
|
|
|
return node2;
|
|
};
|