support for non-Identifier/MemberExpression class super
This commit is contained in:
@@ -3,14 +3,14 @@ var util = require("../util");
|
||||
var b = require("ast-types").builders;
|
||||
var _ = require("lodash");
|
||||
|
||||
exports.ClassDeclaration = function (node) {
|
||||
exports.ClassDeclaration = function (node, parent, opts, generateUid) {
|
||||
return b.variableDeclaration("var", [
|
||||
b.variableDeclarator(node.id, buildClass(node))
|
||||
b.variableDeclarator(node.id, buildClass(node, generateUid))
|
||||
]);
|
||||
};
|
||||
|
||||
exports.ClassExpression = function (node) {
|
||||
return buildClass(node);
|
||||
exports.ClassExpression = function (node, parent, opts, generateUid) {
|
||||
return buildClass(node, generateUid);
|
||||
};
|
||||
|
||||
var getMemberExpressionObject = function (node) {
|
||||
@@ -20,14 +20,20 @@ var getMemberExpressionObject = function (node) {
|
||||
return node;
|
||||
};
|
||||
|
||||
var buildClass = function (node) {
|
||||
var buildClass = function (node, generateUid) {
|
||||
var superName = node.superClass;
|
||||
var className = node.id || b.identifier("Anonymous");
|
||||
|
||||
var superClassReference = node.superClass;
|
||||
var superClassArgument = node.superClass;
|
||||
var superClassCallee = node.superClass;
|
||||
|
||||
if (superName && superName.type === "MemberExpression") {
|
||||
superClassReference = getMemberExpressionObject(superName);
|
||||
if (superName) {
|
||||
if (superName.type === "MemberExpression") {
|
||||
superClassArgument = superClassCallee = getMemberExpressionObject(superName);
|
||||
} else if (superName.type !== "Identifier") {
|
||||
superClassArgument = superName;
|
||||
superClassCallee = superName = b.identifier(generateUid("ref"));
|
||||
}
|
||||
}
|
||||
|
||||
var container = util.template("class", {
|
||||
@@ -45,8 +51,8 @@ var buildClass = function (node) {
|
||||
CLASS_NAME: className
|
||||
}, true));
|
||||
|
||||
container.arguments.push(superClassReference);
|
||||
container.callee.params.push(superClassReference);
|
||||
container.arguments.push(superClassArgument);
|
||||
container.callee.params.push(superClassCallee);
|
||||
}
|
||||
|
||||
buildClassBody(body, className, superName, node);
|
||||
|
||||
Reference in New Issue
Block a user