static method class super references - fixes #40

This commit is contained in:
Sebastian McKenzie
2014-10-11 08:58:54 +11:00
parent 80b0b9f5f6
commit 35522c2ef3
3 changed files with 13 additions and 5 deletions

View File

@@ -81,7 +81,7 @@ var buildClassBody = function (body, className, superName, node) {
var methodName = node.key.name;
var method = node.value;
replaceInstanceSuperReferences(superName, method, methodName);
replaceInstanceSuperReferences(superName, method, node, methodName);
if (methodName === "constructor") {
if (node.kind === "") {
@@ -126,7 +126,7 @@ var buildClassBody = function (body, className, superName, node) {
}
};
var superIdentifier = function (superName, methodName, node, parent) {
var superIdentifier = function (superName, methodNode, methodName, node, parent) {
if (parent.property === node) return;
node.name = superName.name || superName.value;
@@ -138,7 +138,8 @@ var superIdentifier = function (superName, methodName, node, parent) {
node.name += ".call";
} else {
// foo() { super(); }
node.name += ".prototype." + methodName + ".call";
if (!methodNode.static) node.name += ".prototype";
node.name += "." + methodName + ".call";
}
parent.arguments.unshift(b.thisExpression());
@@ -148,12 +149,12 @@ var superIdentifier = function (superName, methodName, node, parent) {
}
};
var replaceInstanceSuperReferences = function (superName, method, methodName) {
var replaceInstanceSuperReferences = function (superName, method, methodNode, methodName) {
superName = superName || b.literal("Function");
traverse(method, function (node, parent) {
if (node.type === "Identifier" && node.name === "super") {
superIdentifier(superName, methodName, node, parent);
superIdentifier(superName, methodNode, methodName, node, parent);
} else if (node.type === "CallExpression") {
var callee = node.callee;
if (callee.type !== "MemberExpression") return;