diff --git a/lib/6to5/generation/generators/expressions.js b/lib/6to5/generation/generators/expressions.js index 17f5dbda68..7bd7a22bc5 100644 --- a/lib/6to5/generation/generators/expressions.js +++ b/lib/6to5/generation/generators/expressions.js @@ -86,6 +86,7 @@ exports.ExpressionStatement = function (node, print) { exports.BinaryExpression = exports.LogicalExpression = +exports.AssignmentPattern = exports.AssignmentExpression = function (node, print) { print(node.left); this.push(" " + node.operator + " "); diff --git a/lib/6to5/patch.js b/lib/6to5/patch.js index 836538b2f8..76e65bd38f 100644 --- a/lib/6to5/patch.js +++ b/lib/6to5/patch.js @@ -12,6 +12,12 @@ var types = require("ast-types"); var def = types.Type.def; var or = types.Type.or; +def("AssignmentPattern") + .bases("Pattern") + .build("left", "right") + .field("left", def("Pattern")) + .field("right", def("Expression")); + // Acorn - Same as ImportNamespaceSpecifier but `id` is `name` def("ImportBatchSpecifier") .bases("Specifier") diff --git a/lib/6to5/transformation/transformers/es6-destructuring.js b/lib/6to5/transformation/transformers/es6-destructuring.js index c8b7bffb36..90746a2029 100644 --- a/lib/6to5/transformation/transformers/es6-destructuring.js +++ b/lib/6to5/transformation/transformers/es6-destructuring.js @@ -20,6 +20,8 @@ var push = function (opts, nodes, elem, parentId) { pushObjectPattern(opts, nodes, elem, parentId); } else if (t.isArrayPattern(elem)) { pushArrayPattern(opts, nodes, elem, parentId); + } else if (t.isAssignmentPattern(elem)) { + return; } else { nodes.push(buildVariableAssign(opts, elem, parentId)); } @@ -48,6 +50,8 @@ var pushObjectPattern = function (opts, nodes, pattern, parentId) { var value = t.callExpression(opts.file.addHelper("object-without-properties"), [parentId, keys]); nodes.push(buildVariableAssign(opts, prop.argument, value)); } else { + if (t.isLiteral(prop.key)) prop.computed = true; + var pattern2 = prop.value; var patternId2 = t.memberExpression(parentId, prop.key, prop.computed); diff --git a/lib/6to5/types/alias-keys.json b/lib/6to5/types/alias-keys.json index 56ad154225..e07ecc429d 100644 --- a/lib/6to5/types/alias-keys.json +++ b/lib/6to5/types/alias-keys.json @@ -39,8 +39,9 @@ "ForInStatement": ["Statement", "For", "Scope", "Loop"], "ForStatement": ["Statement", "For", "Scope", "Loop"], - "ObjectPattern": ["Pattern"], - "ArrayPattern": ["Pattern"], + "ObjectPattern": ["Pattern"], + "ArrayPattern": ["Pattern"], + "AssignmentPattern": ["Pattern"], "Property": ["UserWhitespacable"], "XJSElement": ["UserWhitespacable", "Expression"], diff --git a/lib/6to5/types/visitor-keys.json b/lib/6to5/types/visitor-keys.json index 32292aa669..aac62dd391 100644 --- a/lib/6to5/types/visitor-keys.json +++ b/lib/6to5/types/visitor-keys.json @@ -3,6 +3,7 @@ "ArrayPattern": ["elements"], "ArrowFunctionExpression": ["params", "defaults", "rest", "body"], "AssignmentExpression": ["left", "right"], + "AssignmentPattern": ["left", "right"], "AwaitExpression": ["argument"], "BinaryExpression": ["left", "right"], "BindFunctionExpression": ["callee", "arguments"],