diff --git a/lib/6to5/transformers/classes.js b/lib/6to5/transformers/classes.js index 1585ec2f06..ec94d049e7 100644 --- a/lib/6to5/transformers/classes.js +++ b/lib/6to5/transformers/classes.js @@ -127,16 +127,16 @@ var buildClassBody = function (body, className, superName, node) { var superIdentifier = function (superName, methodNode, methodName, node, parent) { if (parent.property === node) return; - node.name = superName.name || superName.value; - // super(); -> ClassName.prototype.MethodName.call(this); if (parent.type === "CallExpression" && parent.callee === node) { parent.arguments.unshift(b.thisExpression()); if (methodName === "constructor") { // constructor() { super(); } - return b.memberExpression(node, b.identifier("call"), false); + return b.memberExpression(superName, b.identifier("call"), false); } else { + node = superName; + // foo() { super(); } if (!methodNode.static) { node = b.memberExpression(node, b.identifier("prototype"), false); @@ -147,12 +147,14 @@ var superIdentifier = function (superName, methodNode, methodName, node, parent) } } else if (parent.type === "MemberExpression") { // super.test -> ClassName.prototype.test - return b.memberExpression(node, b.identifier("prototype"), false); + return b.memberExpression(superName, b.identifier("prototype"), false); + } else { + return superName; } }; var replaceInstanceSuperReferences = function (superName, method, methodNode, methodName) { - superName = superName || b.literal("Function"); + superName = superName || b.identifier("Function"); traverse(method, function (node, parent) { if (node.type === "Identifier" && node.name === "super") { @@ -162,7 +164,7 @@ var replaceInstanceSuperReferences = function (superName, method, methodNode, me if (callee.type !== "MemberExpression") return; if (callee.object.name !== "super") return; - // super.test(); -> Classname.prototype.MethodName.call(this); + // super.test(); -> ClassName.prototype.MethodName.call(this); callee.property.name = callee.property.name + ".call"; node.arguments.unshift(b.thisExpression()); }