support destructuring in For*Statements
This commit is contained in:
@@ -117,7 +117,7 @@ transform.transformers = {
|
||||
generators: require("./transformers/generators"),
|
||||
blockBinding: require("./transformers/block-binding"),
|
||||
restParameters: require("./transformers/rest-parameters"),
|
||||
forOf: require("./transformers/for-of"),
|
||||
destructuring: require("./transformers/destructuring"),
|
||||
forOf: require("./transformers/for-of"),
|
||||
unicodeRegex: require("./transformers/unicode-regex")
|
||||
};
|
||||
|
||||
@@ -62,6 +62,27 @@ var pushPattern = function (kind, nodes, pattern, parentId, generateUid) {
|
||||
push(kind, nodes, pattern, parentId);
|
||||
};
|
||||
|
||||
exports.ForInStatement =
|
||||
exports.ForOfStatement = function (node, parent, opts, generateUid) {
|
||||
var declar = node.left;
|
||||
if (declar.type !== "VariableDeclaration") return;
|
||||
|
||||
var pattern = declar.declarations[0].id;
|
||||
if (!util.isPattern(pattern)) return;
|
||||
|
||||
var key = b.identifier(generateUid("ref"));
|
||||
node.left = b.variableDeclaration(declar.kind, [
|
||||
b.variableDeclarator(key, null)
|
||||
]);
|
||||
|
||||
var nodes = [];
|
||||
|
||||
push(declar.kind, nodes, pattern, key);
|
||||
|
||||
var block = node.body;
|
||||
block.body = nodes.concat(block.body);
|
||||
};
|
||||
|
||||
exports.FunctionDeclaration =
|
||||
exports.FunctionExpression = function (node, parent, opts, generateUid) {
|
||||
var block = node.body;
|
||||
|
||||
@@ -2,17 +2,15 @@ var util = require("../util");
|
||||
var b = require("ast-types").builders;
|
||||
|
||||
exports.ForOfStatement = function (node, parent, opts, generateUid) {
|
||||
var declar;
|
||||
var isPattern = false;
|
||||
|
||||
var left = node.left;
|
||||
var key;
|
||||
if (node.left.type === "VariableDeclaration") {
|
||||
declar = node.left;
|
||||
key = declar.declarations[0].id;
|
||||
|
||||
if (left.type === "Identifier") {
|
||||
key = left;
|
||||
} else if (left.type === "VariableDeclaration") {
|
||||
key = left.declarations[0].id;
|
||||
} else {
|
||||
isPattern = true;
|
||||
declar = node.left[0];
|
||||
key = b.identifier(generateUid("ref"));
|
||||
return;
|
||||
}
|
||||
|
||||
var node2 = util.template("for-of", {
|
||||
@@ -22,14 +20,7 @@ exports.ForOfStatement = function (node, parent, opts, generateUid) {
|
||||
KEY: key
|
||||
});
|
||||
|
||||
var block = node2.body;
|
||||
|
||||
if (isPattern) {
|
||||
block.body.push(b.variableDeclaration(declar.kind, [
|
||||
b.variableDeclarator(declar.declarations[0].id, key)
|
||||
]));
|
||||
}
|
||||
|
||||
var block = node2.body;
|
||||
block.body = block.body.concat(node.body.body || []);
|
||||
|
||||
var declar = block.body[0];
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
for (var name in obj) {
|
||||
var value = obj[name];
|
||||
for (var _ref in obj) {
|
||||
var name = _ref[0];
|
||||
var value = _ref[1];
|
||||
print("Name: " + name + ", Value: " + value);
|
||||
}
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
for (var _iterator = this.test.expectation.registers[Symbol.iterator](), _step; !(_step = _iterator.next()).done;) {
|
||||
var name = _step.value[0];
|
||||
var before = _step.value[1];
|
||||
var after = _step.value[2];
|
||||
var _ref = _step.value;
|
||||
var name = _ref[0];
|
||||
var before = _ref[1];
|
||||
var after = _ref[2];
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user