diff --git a/lib/6to5/transformation/transformers/es6-destructuring.js b/lib/6to5/transformation/transformers/es6-destructuring.js index 90746a2029..489d2de53c 100644 --- a/lib/6to5/transformation/transformers/es6-destructuring.js +++ b/lib/6to5/transformation/transformers/es6-destructuring.js @@ -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;