static method class super references - fixes #40
This commit is contained in:
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user