support for non-Identifier/MemberExpression class super
This commit is contained in:
parent
f82909f4ca
commit
9c5262baab
@ -3,14 +3,14 @@ var util = require("../util");
|
|||||||
var b = require("ast-types").builders;
|
var b = require("ast-types").builders;
|
||||||
var _ = require("lodash");
|
var _ = require("lodash");
|
||||||
|
|
||||||
exports.ClassDeclaration = function (node) {
|
exports.ClassDeclaration = function (node, parent, opts, generateUid) {
|
||||||
return b.variableDeclaration("var", [
|
return b.variableDeclaration("var", [
|
||||||
b.variableDeclarator(node.id, buildClass(node))
|
b.variableDeclarator(node.id, buildClass(node, generateUid))
|
||||||
]);
|
]);
|
||||||
};
|
};
|
||||||
|
|
||||||
exports.ClassExpression = function (node) {
|
exports.ClassExpression = function (node, parent, opts, generateUid) {
|
||||||
return buildClass(node);
|
return buildClass(node, generateUid);
|
||||||
};
|
};
|
||||||
|
|
||||||
var getMemberExpressionObject = function (node) {
|
var getMemberExpressionObject = function (node) {
|
||||||
@ -20,14 +20,20 @@ var getMemberExpressionObject = function (node) {
|
|||||||
return node;
|
return node;
|
||||||
};
|
};
|
||||||
|
|
||||||
var buildClass = function (node) {
|
var buildClass = function (node, generateUid) {
|
||||||
var superName = node.superClass;
|
var superName = node.superClass;
|
||||||
var className = node.id || b.identifier("Anonymous");
|
var className = node.id || b.identifier("Anonymous");
|
||||||
|
|
||||||
var superClassReference = node.superClass;
|
var superClassArgument = node.superClass;
|
||||||
|
var superClassCallee = node.superClass;
|
||||||
|
|
||||||
if (superName && superName.type === "MemberExpression") {
|
if (superName) {
|
||||||
superClassReference = getMemberExpressionObject(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", {
|
var container = util.template("class", {
|
||||||
@ -45,8 +51,8 @@ var buildClass = function (node) {
|
|||||||
CLASS_NAME: className
|
CLASS_NAME: className
|
||||||
}, true));
|
}, true));
|
||||||
|
|
||||||
container.arguments.push(superClassReference);
|
container.arguments.push(superClassArgument);
|
||||||
container.callee.params.push(superClassReference);
|
container.callee.params.push(superClassCallee);
|
||||||
}
|
}
|
||||||
|
|
||||||
buildClassBody(body, className, superName, node);
|
buildClassBody(body, className, superName, node);
|
||||||
|
|||||||
@ -1,7 +1,7 @@
|
|||||||
{
|
{
|
||||||
"name": "6to5",
|
"name": "6to5",
|
||||||
"description": "Turn ES6 code into vanilla ES5 with source maps and no runtime",
|
"description": "Turn ES6 code into vanilla ES5 with source maps and no runtime",
|
||||||
"version": "1.7.0",
|
"version": "1.7.1",
|
||||||
"author": "Sebastian McKenzie <sebmck@gmail.com>",
|
"author": "Sebastian McKenzie <sebmck@gmail.com>",
|
||||||
"homepage": "https://github.com/sebmck/6to5",
|
"homepage": "https://github.com/sebmck/6to5",
|
||||||
"repository": {
|
"repository": {
|
||||||
|
|||||||
3
test/fixtures/classes/super-class-non-identifiers/actual.js
vendored
Normal file
3
test/fixtures/classes/super-class-non-identifiers/actual.js
vendored
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
class Q extends function() {} {
|
||||||
|
|
||||||
|
}
|
||||||
14
test/fixtures/classes/super-class-non-identifiers/expected.js
vendored
Normal file
14
test/fixtures/classes/super-class-non-identifiers/expected.js
vendored
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
var Q = function(_ref) {
|
||||||
|
function Q() {}
|
||||||
|
|
||||||
|
Q.prototype = Object.create(_ref.prototype, {
|
||||||
|
constructor: {
|
||||||
|
value: Q,
|
||||||
|
enumerable: false,
|
||||||
|
writable: true,
|
||||||
|
configurable: true
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
return Q;
|
||||||
|
}(function() {});
|
||||||
Loading…
x
Reference in New Issue
Block a user