add support for member expression super classes - closes #22

This commit is contained in:
Sebastian McKenzie 2014-10-09 14:03:19 +11:00
parent 7ee8f8ff3d
commit 0664ccff98
3 changed files with 49 additions and 2 deletions

View File

@ -13,10 +13,23 @@ exports.ClassExpression = function (node) {
return buildClass(node);
};
var getMemberExpressionObject = function (node) {
while (node.type === "MemberExpression") {
node = node.object;
}
return node;
};
var buildClass = function (node) {
var superName = node.superClass;
var className = node.id;
var superClassReference = node.superClass;
if (superName && superName.type === "MemberExpression") {
superClassReference = getMemberExpressionObject(superName);
}
var container = util.template("class", {
CLASS_NAME: className
});
@ -32,8 +45,8 @@ var buildClass = function (node) {
CLASS_NAME: className
}, true));
container.arguments.push(superName);
container.callee.params.push(superName);
container.arguments.push(superClassReference);
container.callee.params.push(superClassReference);
}
buildClassBody(body, className, superName, node);

View File

@ -0,0 +1,7 @@
class BaseController extends Chaplin.Controller {
}
class BaseController2 extends Chaplin.Controller.Another {
}

View File

@ -0,0 +1,27 @@
var BaseController = function (Chaplin) {
function BaseController() {
}
BaseController.prototype = Object.create(Chaplin.Controller.prototype, {
constructor: {
value: BaseController,
enumerable: false,
writable: true,
configurable: true
}
});
return BaseController;
}(Chaplin);
var BaseController2 = function (Chaplin) {
function BaseController2() {
}
BaseController2.prototype = Object.create(Chaplin.Controller.Another.prototype, {
constructor: {
value: BaseController2,
enumerable: false,
writable: true,
configurable: true
}
});
return BaseController2;
}(Chaplin);