add destructuring defaults #230

This commit is contained in:
Sebastian McKenzie 2015-01-06 10:38:55 +11:00
parent 1b85607d7d
commit b38a00d70e

View File

@ -21,12 +21,30 @@ var push = function (opts, nodes, elem, parentId) {
} else if (t.isArrayPattern(elem)) {
pushArrayPattern(opts, nodes, elem, parentId);
} else if (t.isAssignmentPattern(elem)) {
return;
pushAssignmentPattern(opts, nodes, elem, parentId);
} else {
nodes.push(buildVariableAssign(opts, elem, parentId));
}
};
var pushAssignmentPattern = function (opts, nodes, pattern, parentId) {
var tempParentId = opts.scope.generateUidBasedOnNode(parentId, opts.file);
nodes.push(t.variableDeclaration("var", [
t.variableDeclarator(tempParentId, parentId)
]));
nodes.push(buildVariableAssign(
opts,
pattern.left,
t.conditionalExpression(
t.binaryExpression("===", tempParentId, t.identifier("undefined")),
pattern.right,
tempParentId
)
));
};
var pushObjectPattern = function (opts, nodes, pattern, parentId) {
for (var i in pattern.properties) {
var prop = pattern.properties[i];
@ -187,6 +205,24 @@ exports.Function = function (node, parent, file, scope) {
block.body = nodes.concat(block.body);
};
exports.CatchClause = function (node, parent, file, scope) {
var pattern = node.param;
if (!t.isPattern(pattern)) return;
var ref = file.generateUidIdentifier("ref", scope);
node.param = ref;
var nodes = [];
push({
kind: "var",
file: file,
scope: scope
}, nodes, pattern, ref);
node.body.body = nodes.concat(node.body.body);
};
exports.ExpressionStatement = function (node, parent, file, scope) {
var expr = node.expression;
if (expr.type !== "AssignmentExpression") return;