fix static member expression calls, make classes more spec-compliant
This commit is contained in:
@@ -1,7 +1,7 @@
|
||||
(function () {
|
||||
function CLASS_NAME() {
|
||||
var CLASS_NAME = function CLASS_NAME() {
|
||||
|
||||
}
|
||||
};
|
||||
|
||||
return CLASS_NAME;
|
||||
})()
|
||||
|
||||
@@ -22,7 +22,19 @@ var getMemberExpressionObject = function (node) {
|
||||
|
||||
var buildClass = function (node, generateUid) {
|
||||
var superName = node.superClass;
|
||||
var className = node.id || b.identifier("Anonymous");
|
||||
var className = node.id;
|
||||
|
||||
if (superName) {
|
||||
if (superName.type === "Literal" && superName.value === null) {
|
||||
superName = null;
|
||||
}
|
||||
}
|
||||
|
||||
var noName = false;
|
||||
if (!className) {
|
||||
className = b.identifier(generateUid("_class"));
|
||||
noName = true;
|
||||
}
|
||||
|
||||
var superClassArgument = node.superClass;
|
||||
var superClassCallee = node.superClass;
|
||||
@@ -43,6 +55,10 @@ var buildClass = function (node, generateUid) {
|
||||
var block = container.callee.body;
|
||||
var body = block.body;
|
||||
|
||||
if (noName) {
|
||||
body[0].declarations[0].init.id = null;
|
||||
}
|
||||
|
||||
var returnStatement = body.pop();
|
||||
|
||||
if (superName) {
|
||||
@@ -74,7 +90,7 @@ var buildClassBody = function (body, className, superName, node) {
|
||||
var staticMutatorMap = {};
|
||||
var hasConstructor = false;
|
||||
|
||||
var construct = body[0];
|
||||
var construct = body[0].declarations[0].init;
|
||||
var classBody = node.body.body;
|
||||
|
||||
_.each(classBody, function (node) {
|
||||
@@ -145,7 +161,7 @@ var superIdentifier = function (superName, methodNode, methodName, node, parent)
|
||||
node = b.memberExpression(node, b.identifier(methodName), false);
|
||||
return b.memberExpression(node, b.identifier("call"), false);
|
||||
}
|
||||
} else if (parent.type === "MemberExpression") {
|
||||
} else if (parent.type === "MemberExpression" && !methodNode.static) {
|
||||
// super.test -> ClassName.prototype.test
|
||||
return b.memberExpression(superName, b.identifier("prototype"), false);
|
||||
} else {
|
||||
|
||||
Reference in New Issue
Block a user