fix static member expression calls, make classes more spec-compliant

This commit is contained in:
Sebastian McKenzie
2014-10-12 13:39:10 +11:00
parent 141ea98b89
commit bb697c6436
34 changed files with 158 additions and 128 deletions

View File

@@ -1,7 +1,7 @@
(function () {
function CLASS_NAME() {
var CLASS_NAME = function CLASS_NAME() {
}
};
return CLASS_NAME;
})()

View File

@@ -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 {