parent
858a2c74e7
commit
0ee9a4e612
@ -382,7 +382,6 @@ export default function transformClass(
|
||||
|
||||
let guaranteedSuperBeforeFinish = !!classState.bareSupers.size;
|
||||
|
||||
const superRef = classState.superName || t.identifier("Function");
|
||||
let thisRef = function() {
|
||||
const ref = path.scope.generateDeclaredUidIdentifier("this");
|
||||
thisRef = () => t.cloneNode(ref);
|
||||
@ -390,7 +389,7 @@ export default function transformClass(
|
||||
};
|
||||
|
||||
for (const bareSuper of classState.bareSupers) {
|
||||
wrapSuperCall(bareSuper, superRef, thisRef, body);
|
||||
wrapSuperCall(bareSuper, classState.superName, thisRef, body);
|
||||
|
||||
if (guaranteedSuperBeforeFinish) {
|
||||
bareSuper.find(function(parentPath) {
|
||||
@ -638,7 +637,7 @@ export default function transformClass(
|
||||
classRef: classState.node.id
|
||||
? t.identifier(classState.node.id.name)
|
||||
: classState.scope.generateUidIdentifier("class"),
|
||||
superName: classState.node.superClass || t.identifier("Function"),
|
||||
superName: classState.node.superClass,
|
||||
isDerived: !!classState.node.superClass,
|
||||
constructorBody: t.blockStatement([]),
|
||||
});
|
||||
|
||||
17
packages/babel-plugin-transform-classes/test/fixtures/loose/default-super/exec.js
vendored
Normal file
17
packages/babel-plugin-transform-classes/test/fixtures/loose/default-super/exec.js
vendored
Normal file
@ -0,0 +1,17 @@
|
||||
class Test {
|
||||
constructor() {
|
||||
return super.constructor;
|
||||
}
|
||||
|
||||
static test() {
|
||||
return super.constructor;
|
||||
}
|
||||
}
|
||||
|
||||
// Instances
|
||||
expect(Object.getPrototypeOf(Test.prototype)).toBe(Object.prototype);
|
||||
expect(new Test()).toBe(Object);
|
||||
|
||||
// Static
|
||||
expect(Object.getPrototypeOf(Test)).toBe(Function.prototype);
|
||||
expect(Test.test()).toBe(Function);
|
||||
17
packages/babel-plugin-transform-classes/test/fixtures/loose/default-super/input.js
vendored
Normal file
17
packages/babel-plugin-transform-classes/test/fixtures/loose/default-super/input.js
vendored
Normal file
@ -0,0 +1,17 @@
|
||||
class Test {
|
||||
constructor() {
|
||||
return super.constructor;
|
||||
}
|
||||
|
||||
static test() {
|
||||
return super.constructor;
|
||||
}
|
||||
}
|
||||
|
||||
// Instances
|
||||
expect(Object.getPrototypeOf(Test.prototype)).toBe(Object.prototype);
|
||||
expect(new Test()).toBe(Object);
|
||||
|
||||
// Static
|
||||
expect(Object.getPrototypeOf(Test)).toBe(Function.prototype);
|
||||
expect(Test.test()).toBe(Function);
|
||||
22
packages/babel-plugin-transform-classes/test/fixtures/loose/default-super/output.js
vendored
Normal file
22
packages/babel-plugin-transform-classes/test/fixtures/loose/default-super/output.js
vendored
Normal file
@ -0,0 +1,22 @@
|
||||
var Test =
|
||||
/*#__PURE__*/
|
||||
function () {
|
||||
"use strict";
|
||||
|
||||
function Test() {
|
||||
return Object.prototype.constructor;
|
||||
}
|
||||
|
||||
Test.test = function test() {
|
||||
return Function.prototype.constructor;
|
||||
};
|
||||
|
||||
return Test;
|
||||
}(); // Instances
|
||||
|
||||
|
||||
expect(Object.getPrototypeOf(Test.prototype)).toBe(Object.prototype);
|
||||
expect(new Test()).toBe(Object); // Static
|
||||
|
||||
expect(Object.getPrototypeOf(Test)).toBe(Function.prototype);
|
||||
expect(Test.test()).toBe(Function);
|
||||
@ -1,5 +1,5 @@
|
||||
var Test = function Test() {
|
||||
"use strict";
|
||||
|
||||
Function.prototype.hasOwnProperty.call(this, "test");
|
||||
Object.prototype.hasOwnProperty.call(this, "test");
|
||||
};
|
||||
|
||||
17
packages/babel-plugin-transform-classes/test/fixtures/spec/default-super/exec.js
vendored
Normal file
17
packages/babel-plugin-transform-classes/test/fixtures/spec/default-super/exec.js
vendored
Normal file
@ -0,0 +1,17 @@
|
||||
class Test {
|
||||
constructor() {
|
||||
return super.constructor;
|
||||
}
|
||||
|
||||
static test() {
|
||||
return super.constructor;
|
||||
}
|
||||
}
|
||||
|
||||
// Instances
|
||||
expect(Object.getPrototypeOf(Test.prototype)).toBe(Object.prototype);
|
||||
expect(new Test()).toBe(Object);
|
||||
|
||||
// Static
|
||||
expect(Object.getPrototypeOf(Test)).toBe(Function.prototype);
|
||||
expect(Test.test()).toBe(Function);
|
||||
17
packages/babel-plugin-transform-classes/test/fixtures/spec/default-super/input.js
vendored
Normal file
17
packages/babel-plugin-transform-classes/test/fixtures/spec/default-super/input.js
vendored
Normal file
@ -0,0 +1,17 @@
|
||||
class Test {
|
||||
constructor() {
|
||||
return super.constructor;
|
||||
}
|
||||
|
||||
static test() {
|
||||
return super.constructor;
|
||||
}
|
||||
}
|
||||
|
||||
// Instances
|
||||
expect(Object.getPrototypeOf(Test.prototype)).toBe(Object.prototype);
|
||||
expect(new Test()).toBe(Object);
|
||||
|
||||
// Static
|
||||
expect(Object.getPrototypeOf(Test)).toBe(Function.prototype);
|
||||
expect(Test.test()).toBe(Function);
|
||||
25
packages/babel-plugin-transform-classes/test/fixtures/spec/default-super/output.js
vendored
Normal file
25
packages/babel-plugin-transform-classes/test/fixtures/spec/default-super/output.js
vendored
Normal file
@ -0,0 +1,25 @@
|
||||
var Test =
|
||||
/*#__PURE__*/
|
||||
function () {
|
||||
"use strict";
|
||||
|
||||
function Test() {
|
||||
babelHelpers.classCallCheck(this, Test);
|
||||
return babelHelpers.get(babelHelpers.getPrototypeOf(Test.prototype), "constructor", babelHelpers.assertThisInitialized(this));
|
||||
}
|
||||
|
||||
babelHelpers.createClass(Test, null, [{
|
||||
key: "test",
|
||||
value: function test() {
|
||||
return babelHelpers.get(babelHelpers.getPrototypeOf(Test), "constructor", this);
|
||||
}
|
||||
}]);
|
||||
return Test;
|
||||
}(); // Instances
|
||||
|
||||
|
||||
expect(Object.getPrototypeOf(Test.prototype)).toBe(Object.prototype);
|
||||
expect(new Test()).toBe(Object); // Static
|
||||
|
||||
expect(Object.getPrototypeOf(Test)).toBe(Function.prototype);
|
||||
expect(Test.test()).toBe(Function);
|
||||
Loading…
x
Reference in New Issue
Block a user