better support for Identifier in ForOfStatement
This commit is contained in:
@@ -1,3 +1,3 @@
|
||||
for (var ITERATOR_KEY = OBJECT[Symbol.iterator](), STEP_KEY; !(STEP_KEY = ITERATOR_KEY.next()).done; ) {
|
||||
var KEY = STEP_KEY.value;
|
||||
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user