diff --git a/lib/6to5/transformation/transformers/es6-classes.js b/lib/6to5/transformation/transformers/es6-classes.js index d1e48dda5b..327b1a8063 100644 --- a/lib/6to5/transformation/transformers/es6-classes.js +++ b/lib/6to5/transformation/transformers/es6-classes.js @@ -276,9 +276,7 @@ Class.prototype.replaceInstanceSuperReferences = function (methodNode) { if (callee.object.name !== "super") return; // super.test(); -> ClassName.prototype.MethodName.call(this); - callee.object = t.memberExpression(callee.object, callee.property, callee.computed); - callee.computed = false; - callee.property = t.identifier("call"); + t.appendToMemberExpression(callee, t.identifier("call")); node.arguments.unshift(t.thisExpression()); } } diff --git a/lib/6to5/transformation/transformers/es6-spread.js b/lib/6to5/transformation/transformers/es6-spread.js index e1dc5269d0..e3b13c8bdc 100644 --- a/lib/6to5/transformation/transformers/es6-spread.js +++ b/lib/6to5/transformation/transformers/es6-spread.js @@ -87,9 +87,7 @@ exports.CallExpression = function (node, parent, file, scope) { callee.object = t.assignmentExpression("=", temp, callee.object); } - callee.object = t.memberExpression(callee.object, callee.property, callee.computed); - callee.computed = false; - callee.property = t.identifier("apply"); + t.appendToMemberExpression(callee, t.identifier("apply")); } else { node.callee = t.memberExpression(node.callee, t.identifier("apply")); } diff --git a/lib/6to5/transformation/transformers/optional-core-aliasing.js b/lib/6to5/transformation/transformers/optional-core-aliasing.js index 9c4831a87e..a23602d736 100644 --- a/lib/6to5/transformation/transformers/optional-core-aliasing.js +++ b/lib/6to5/transformation/transformers/optional-core-aliasing.js @@ -30,7 +30,7 @@ exports.ast = { if (!node.computed && coreHas(obj) && _.has(core[obj.name], prop.name)) { this.stop(); - return t.memberExpression(t.memberExpression(file._coreId, node.object), node.property, node.computed); + return t.prependToMemberExpression(node, file._coreId); } } else if (t.isIdentifier(node) && !t.isMemberExpression(parent) && t.isReferenced(node, parent) && coreHas(node)) { // new Promise -> new _core.Promise diff --git a/lib/6to5/types/index.js b/lib/6to5/types/index.js index 53f5f3842e..9956aff41b 100644 --- a/lib/6to5/types/index.js +++ b/lib/6to5/types/index.js @@ -118,6 +118,20 @@ t.shallowEqual = function (actual, expected) { // +t.appendToMemberExpression = function (member, append, computed) { + member.object = t.memberExpression(member.object, member.property, member.computed); + member.property = append; + member.computed = !!computed; + return member; +}; + +t.prependToMemberExpression = function (member, append) { + member.object = t.memberExpression(append, member.object); + return member; +}; + +// + t.isDynamic = function (node) { if (t.isExpressionStatement(node)) { return t.isDynamic(node.expression); @@ -130,7 +144,6 @@ t.isDynamic = function (node) { } }; -// todo: https://github.com/eventualbuddha/ast-util/blob/9bf91c5ce8/lib/index.js#L454-L507 t.isReferenced = function (node, parent) { // we're a property key and we aren't computed so we aren't referenced if (t.isProperty(parent) && parent.key === node && !parent.computed) return false; @@ -152,6 +165,12 @@ t.isReferenced = function (node, parent) { return false; }; +t.isValidIdentifier = function (name) { + return _.isString(name) && esutils.keyword.isIdentifierName(name) && !esutils.keyword.isKeywordES6(name, true); +}; + +// + t.toIdentifier = function (name) { if (t.isIdentifier(name)) return name.name; @@ -172,10 +191,6 @@ t.toIdentifier = function (name) { return name || '_'; }; -t.isValidIdentifier = function (name) { - return _.isString(name) && esutils.keyword.isIdentifierName(name) && !esutils.keyword.isKeywordES6(name, true); -}; - t.ensureBlock = function (node, key) { key = key || "body"; node[key] = t.toBlock(node[key], node); @@ -234,6 +249,8 @@ t.toBlock = function (node, parent) { return t.blockStatement(node); }; +// + t.getUid = function (parent, file, scope) { var node = parent; @@ -327,6 +344,8 @@ t.getIds.arrays = { ObjectPattern: ["properties"] }; +// + t.isLet = function (node) { return t.isVariableDeclaration(node) && (node.kind !== "var" || node._let); };