From a22cd72440b897c23e1163c4ee3e27e4dc7746a1 Mon Sep 17 00:00:00 2001 From: Sebastian McKenzie Date: Fri, 23 Jan 2015 23:20:45 +1100 Subject: [PATCH] update to RestElement - @RReverser --- lib/6to5/generation/generators/types.js | 1 + lib/6to5/patch.js | 5 +++++ .../transformation/transformers/es6/destructuring.js | 10 +++++----- lib/6to5/types/index.js | 1 + lib/6to5/types/visitor-keys.json | 1 + 5 files changed, 13 insertions(+), 5 deletions(-) diff --git a/lib/6to5/generation/generators/types.js b/lib/6to5/generation/generators/types.js index 405fe31720..ea824c5c1a 100644 --- a/lib/6to5/generation/generators/types.js +++ b/lib/6to5/generation/generators/types.js @@ -6,6 +6,7 @@ exports.Identifier = function (node) { this.push(node.name); }; +exports.RestElement = exports.SpreadElement = exports.SpreadProperty = function (node, print) { this.push("..."); diff --git a/lib/6to5/patch.js b/lib/6to5/patch.js index 758cc49356..be867989b9 100644 --- a/lib/6to5/patch.js +++ b/lib/6to5/patch.js @@ -31,6 +31,11 @@ def("ImportBatchSpecifier") .build("name") .field("name", def("Identifier")); +def("RestElement") + .bases("Node") + .build("argument") + .field("argument", def("Expression")); + // Abstract references def("VirtualPropertyExpression") .bases("Expression") diff --git a/lib/6to5/transformation/transformers/es6/destructuring.js b/lib/6to5/transformation/transformers/es6/destructuring.js index b4148aabf2..6bcd0fa90d 100644 --- a/lib/6to5/transformation/transformers/es6/destructuring.js +++ b/lib/6to5/transformation/transformers/es6/destructuring.js @@ -103,15 +103,15 @@ var pushArrayPattern = function (opts, nodes, pattern, parentId) { var i; - var hasSpreadElement = false; + var hasRest = false; for (i = 0; i < pattern.elements.length; i++) { - if (t.isSpreadElement(pattern.elements[i])) { - hasSpreadElement = true; + if (t.isRestElement(pattern.elements[i])) { + hasRest = true; break; } } - var toArray = opts.file.toArray(parentId, !hasSpreadElement && pattern.elements.length); + var toArray = opts.file.toArray(parentId, !hasRest && pattern.elements.length); var _parentId = opts.scope.generateUidBasedOnNode(parentId, opts.file); nodes.push(buildVariableDeclar(opts, _parentId, toArray)); @@ -125,7 +125,7 @@ var pushArrayPattern = function (opts, nodes, pattern, parentId) { var newPatternId; - if (t.isSpreadElement(elem)) { + if (t.isRestElement(elem)) { newPatternId = opts.file.toArray(parentId); if (i > 0) { diff --git a/lib/6to5/types/index.js b/lib/6to5/types/index.js index b6c3bb47cb..efbccc1f9a 100644 --- a/lib/6to5/types/index.js +++ b/lib/6to5/types/index.js @@ -488,6 +488,7 @@ t.getIds.nodes = { ClassDeclaration: ["id"], MemeberExpression: ["object"], SpreadElement: ["argument"], + RestElement: ["argument"], Property: ["value"], ComprehensionBlock: ["left"], AssignmentPattern: ["left"] diff --git a/lib/6to5/types/visitor-keys.json b/lib/6to5/types/visitor-keys.json index c5abe7141f..8eb679cf2c 100644 --- a/lib/6to5/types/visitor-keys.json +++ b/lib/6to5/types/visitor-keys.json @@ -48,6 +48,7 @@ "PrivateDeclaration": ["declarations"], "Program": ["body"], "Property": ["key", "value"], + "RestElement": ["argument"], "ReturnStatement": ["argument"], "SequenceExpression": ["expressions"], "SpreadElement": ["argument"],