add support for AssignmentExpression destructuring outside of ExpressionStatement

This commit is contained in:
Sebastian McKenzie 2014-11-24 00:56:06 +11:00
parent f1759dc419
commit 04bd023787
5 changed files with 34 additions and 9 deletions

View File

@ -1,3 +1,5 @@
// TODO: Clean up
var t = require("../../types");
var _ = require("lodash");
@ -183,10 +185,38 @@ exports.ExpressionStatement = function (node, parent, file, scope) {
return nodes;
};
exports.AssignmentExpression = function (node, parent, file) {
exports.AssignmentExpression = function (node, parent, file, scope) {
if (parent.type === "ExpressionStatement") return;
if (!t.isPattern(node.left)) return;
throw file.errorWithNode(node, "AssignmentExpression destructuring outside of a ExpressionStatement is forbidden due to current 6to5 limitations");
var tempName = file.generateUid("temp", scope);
var temp = t.identifier(tempName);
scope.push(tempName, temp);
var nodes = [];
nodes.push(t.assignmentExpression("=", temp, node.right));
push({
kind: false,
file: file,
scope: scope
}, nodes, node.left, temp);
nodes.push(temp);
nodes = nodes.map(function (node) {
if (t.isExpressionStatement(node)) {
return node.expression;
} else if (t.isVariableDeclaration(node)) {
var declar = node.declarations[0];
scope.push(declar.id.name, declar.id);
return t.assignmentExpression("=", declar.id, declar.init);
} else {
return node;
}
});
return t.sequenceExpression(nodes);
};
exports.VariableDeclaration = function (node, parent, file, scope) {

View File

@ -1,3 +0,0 @@
{
"throws": "AssignmentExpression destructuring outside of a ExpressionStatement is forbidden due to current 6to5 limitations"
}

View File

@ -0,0 +1,2 @@
var _temp;
console.log((_temp = [1, 2, 3], x = _temp[0], _temp));

View File

@ -1,3 +0,0 @@
{
"throws": "AssignmentExpression destructuring outside of a ExpressionStatement is forbidden due to current 6to5 limitations"
}