Merge pull request #870 from neVERberleRfellerER/fix-extends-anon-class
fix extends with empty anonymous base class
This commit is contained in:
commit
8c5e7cf272
@ -65,6 +65,7 @@ function ClassTransformer(node, file, scope, isStatement) {
|
|||||||
ClassTransformer.prototype.run = function () {
|
ClassTransformer.prototype.run = function () {
|
||||||
var superName = this.superName;
|
var superName = this.superName;
|
||||||
var className = this.className;
|
var className = this.className;
|
||||||
|
var classBody = this.node.body.body;
|
||||||
var file = this.file;
|
var file = this.file;
|
||||||
|
|
||||||
//
|
//
|
||||||
@ -83,7 +84,17 @@ ClassTransformer.prototype.run = function () {
|
|||||||
constructor = t.functionDeclaration(className, [], constructorBody);
|
constructor = t.functionDeclaration(className, [], constructorBody);
|
||||||
body.push(constructor);
|
body.push(constructor);
|
||||||
} else {
|
} else {
|
||||||
constructor = t.functionExpression(null, [], constructorBody);
|
var constructorName = null;
|
||||||
|
// when class has no parent and there is only constructor or nothing then
|
||||||
|
// constructor is not wrapped in closure and has to be named
|
||||||
|
var containsOnlyConstructor = classBody.length === 1 &&
|
||||||
|
classBody[0].key.name === "constructor";
|
||||||
|
if (!this.hasSuper && (classBody.length === 0 ||
|
||||||
|
containsOnlyConstructor)) {
|
||||||
|
constructorName = className;
|
||||||
|
}
|
||||||
|
|
||||||
|
constructor = t.functionExpression(constructorName, [], constructorBody);
|
||||||
body.push(t.variableDeclaration("var", [
|
body.push(t.variableDeclaration("var", [
|
||||||
t.variableDeclarator(className, constructor)
|
t.variableDeclarator(className, constructor)
|
||||||
]));
|
]));
|
||||||
|
|||||||
20
test/fixtures/transformation/es6-classes/super-class-anonymous/actual.js
vendored
Normal file
20
test/fixtures/transformation/es6-classes/super-class-anonymous/actual.js
vendored
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
class TestEmpty extends (class {}) {
|
||||||
|
}
|
||||||
|
|
||||||
|
class TestConstructorOnly extends (class { constructor() {} }) {
|
||||||
|
}
|
||||||
|
|
||||||
|
class TestMethodOnly extends (class { method() {} }) {
|
||||||
|
}
|
||||||
|
|
||||||
|
class TestConstructorAndMethod extends (class {
|
||||||
|
constructor() {}
|
||||||
|
method() {}
|
||||||
|
}) {
|
||||||
|
}
|
||||||
|
|
||||||
|
class TestMultipleMethods extends (class {
|
||||||
|
m1() {}
|
||||||
|
m2() {}
|
||||||
|
}) {
|
||||||
|
}
|
||||||
129
test/fixtures/transformation/es6-classes/super-class-anonymous/expected.js
vendored
Normal file
129
test/fixtures/transformation/es6-classes/super-class-anonymous/expected.js
vendored
Normal file
@ -0,0 +1,129 @@
|
|||||||
|
"use strict";
|
||||||
|
|
||||||
|
var _prototypeProperties = function (child, staticProps, instanceProps) { if (staticProps) Object.defineProperties(child, staticProps); if (instanceProps) Object.defineProperties(child.prototype, instanceProps); };
|
||||||
|
|
||||||
|
var _inherits = function (subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) subClass.__proto__ = superClass; };
|
||||||
|
|
||||||
|
var _classCallCheck = function (instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } };
|
||||||
|
|
||||||
|
var TestEmpty = (function (_ref) {
|
||||||
|
function TestEmpty() {
|
||||||
|
_classCallCheck(this, TestEmpty);
|
||||||
|
|
||||||
|
if (_ref != null) {
|
||||||
|
_ref.apply(this, arguments);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
_inherits(TestEmpty, _ref);
|
||||||
|
|
||||||
|
return TestEmpty;
|
||||||
|
})(function _class() {
|
||||||
|
_classCallCheck(this, _class);
|
||||||
|
});
|
||||||
|
|
||||||
|
var TestConstructorOnly = (function (_ref2) {
|
||||||
|
function TestConstructorOnly() {
|
||||||
|
_classCallCheck(this, TestConstructorOnly);
|
||||||
|
|
||||||
|
if (_ref2 != null) {
|
||||||
|
_ref2.apply(this, arguments);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
_inherits(TestConstructorOnly, _ref2);
|
||||||
|
|
||||||
|
return TestConstructorOnly;
|
||||||
|
})(function _class2() {
|
||||||
|
_classCallCheck(this, _class2);
|
||||||
|
});
|
||||||
|
|
||||||
|
var TestMethodOnly = (function (_ref3) {
|
||||||
|
function TestMethodOnly() {
|
||||||
|
_classCallCheck(this, TestMethodOnly);
|
||||||
|
|
||||||
|
if (_ref3 != null) {
|
||||||
|
_ref3.apply(this, arguments);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
_inherits(TestMethodOnly, _ref3);
|
||||||
|
|
||||||
|
return TestMethodOnly;
|
||||||
|
})((function () {
|
||||||
|
var _class3 = function () {
|
||||||
|
_classCallCheck(this, _class3);
|
||||||
|
};
|
||||||
|
|
||||||
|
_prototypeProperties(_class3, null, {
|
||||||
|
method: {
|
||||||
|
value: function method() {},
|
||||||
|
writable: true,
|
||||||
|
configurable: true
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
return _class3;
|
||||||
|
})());
|
||||||
|
|
||||||
|
var TestConstructorAndMethod = (function (_ref4) {
|
||||||
|
function TestConstructorAndMethod() {
|
||||||
|
_classCallCheck(this, TestConstructorAndMethod);
|
||||||
|
|
||||||
|
if (_ref4 != null) {
|
||||||
|
_ref4.apply(this, arguments);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
_inherits(TestConstructorAndMethod, _ref4);
|
||||||
|
|
||||||
|
return TestConstructorAndMethod;
|
||||||
|
})((function () {
|
||||||
|
var _class4 = function () {
|
||||||
|
_classCallCheck(this, _class4);
|
||||||
|
};
|
||||||
|
|
||||||
|
_prototypeProperties(_class4, null, {
|
||||||
|
method: {
|
||||||
|
value: function method() {},
|
||||||
|
writable: true,
|
||||||
|
configurable: true
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
return _class4;
|
||||||
|
})());
|
||||||
|
|
||||||
|
var TestMultipleMethods = (function (_ref5) {
|
||||||
|
function TestMultipleMethods() {
|
||||||
|
_classCallCheck(this, TestMultipleMethods);
|
||||||
|
|
||||||
|
if (_ref5 != null) {
|
||||||
|
_ref5.apply(this, arguments);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
_inherits(TestMultipleMethods, _ref5);
|
||||||
|
|
||||||
|
return TestMultipleMethods;
|
||||||
|
})((function () {
|
||||||
|
var _class5 = function () {
|
||||||
|
_classCallCheck(this, _class5);
|
||||||
|
};
|
||||||
|
|
||||||
|
_prototypeProperties(_class5, null, {
|
||||||
|
m1: {
|
||||||
|
value: function m1() {},
|
||||||
|
writable: true,
|
||||||
|
configurable: true
|
||||||
|
},
|
||||||
|
m2: {
|
||||||
|
value: function m2() {},
|
||||||
|
writable: true,
|
||||||
|
configurable: true
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
return _class5;
|
||||||
|
})());
|
||||||
|
|
||||||
Loading…
x
Reference in New Issue
Block a user