Skip to content

Commit

Permalink
Memoize superclass
Browse files Browse the repository at this point in the history
  • Loading branch information
nicolo-ribaudo committed Sep 18, 2023
1 parent 4c11393 commit 004ef9e
Show file tree
Hide file tree
Showing 18 changed files with 69 additions and 60 deletions.
Expand Up @@ -1069,6 +1069,15 @@ function transformClass(
);
}

let { superClass } = originalClass;
if (superClass && (process.env.BABEL_8_BREAKING || version === "2023-05")) {
const id = path.scope.maybeGenerateMemoised(superClass);
if (id) {
originalClass.superClass = t.assignmentExpression("=", id, superClass);
superClass = id;
}
}

originalClass.body.body.unshift(
t.staticBlock(
[
Expand All @@ -1080,7 +1089,7 @@ function transformClass(
t.arrayExpression(classDecorations),
t.numericLiteral(classDecorationsFlag),
needsInstancePrivateBrandCheck ? lastInstancePrivateName : null,
t.cloneNode(originalClass.superClass),
t.cloneNode(superClass),
state,
version,
),
Expand Down
@@ -1,9 +1,9 @@
var _initClass;
var _initClass, _Bar;
const dec = () => {};
let _Foo;
class Foo extends Bar {
class Foo extends (_Bar = Bar) {
static {
[_Foo, _initClass] = babelHelpers.applyDecs2305(this, [], [dec], 0, void 0, Bar).c;
[_Foo, _initClass] = babelHelpers.applyDecs2305(this, [], [dec], 0, void 0, _Bar).c;
}
constructor() {
let foo = super();
Expand Down
@@ -1,10 +1,10 @@
var _call_x, _initProto;
var _call_x, _initProto, _Bar;
const dec = () => {};
class Foo extends Bar {
class Foo extends (_Bar = Bar) {
static {
[_call_x, _initProto] = babelHelpers.applyDecs2305(this, [[dec, 3, "x", function () {
return Bar.prototype.foo.call(this);
}]], [], 0, _ => #x in _, Bar).e;
}]], [], 0, _ => #x in _, _Bar).e;
}
constructor(...args) {
super(...args);
Expand Down
@@ -1,10 +1,10 @@
var _call_x, _initProto;
var _call_x, _initProto, _Bar;
const dec = () => {};
class Foo extends Bar {
class Foo extends (_Bar = Bar) {
static {
[_call_x, _initProto] = babelHelpers.applyDecs2305(this, [[dec, 2, "x", function () {
return Bar.prototype.foo.call(this);
}]], [], 0, _ => #x in _, Bar).e;
}]], [], 0, _ => #x in _, _Bar).e;
}
constructor(...args) {
super(...args);
Expand Down
@@ -1,4 +1,4 @@
var _initClass, _A, _temp, _initClass2, _C, _temp2, _initClass3, _D, _temp3, _initClass4, _decorated_class, _temp4, _class5, _initClass5, _G, _temp5, _initClass6, _decorated_class2, _temp6, _class7, _initClass7, _H, _temp7, _initClass8, _K, _temp8;
var _initClass, _A, _temp, _initClass2, _C, _temp2, _initClass3, _D, _temp3, _initClass4, _decorated_class, _temp4, _class5, _initClass5, _G, _temp5, _initClass6, _decorated_class2, _temp6, _class7, _initClass7, _H, _I, _temp7, _initClass8, _K, _L, _temp8;
const dec = () => {};
const A = (new (_temp = class extends babelHelpers.identity {
constructor() {
Expand Down Expand Up @@ -50,18 +50,18 @@ const H = (new (_temp7 = class extends babelHelpers.identity {
super(_H), (() => {})(), _initClass7();
}
}, (_class8 => {
class H extends I {}
class H extends (_I = I) {}
_class8 = H;
[_H, _initClass7] = babelHelpers.applyDecs2305(_class8, [], [dec], 0, void 0, I).c;
[_H, _initClass7] = babelHelpers.applyDecs2305(_class8, [], [dec], 0, void 0, _I).c;
})(), _temp7)(), _H);
const J = (new (_temp8 = class extends babelHelpers.identity {
constructor() {
super(_K), (() => {})(), _initClass8();
}
}, (_class9 => {
class K extends L {}
class K extends (_L = L) {}
_class9 = K;
[_K, _initClass8] = babelHelpers.applyDecs2305(_class9, [], [dec], 0, void 0, L).c;
[_K, _initClass8] = babelHelpers.applyDecs2305(_class9, [], [dec], 0, void 0, _L).c;
})(), _temp8)(), _K);
function classFactory() {
var _initClass9, _decorated_class3, _temp9, _class11;
Expand Down

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

@@ -1,4 +1,4 @@
var _initClass, _class, _initClass2, _class2;
var _initClass, _class, _initClass2, _Bar2, _class2;
const dec1 = () => {};
const dec2 = () => {};
let _Bar;
Expand All @@ -7,7 +7,7 @@ _class = Bar;
[_Bar, _initClass] = babelHelpers.applyDecs2305(_class, [], [dec1]).c;
_initClass();
let _Foo;
class Foo extends _Bar {}
class Foo extends (_Bar2 = _Bar) {}
_class2 = Foo;
[_Foo, _initClass2] = babelHelpers.applyDecs2305(_class2, [], [dec2], 0, void 0, _Bar).c;
[_Foo, _initClass2] = babelHelpers.applyDecs2305(_class2, [], [dec2], 0, void 0, _Bar2).c;
_initClass2();
@@ -1,4 +1,4 @@
var _initClass, _temp, _initClass2, _temp2;
var _initClass, _temp, _initClass2, _Foo2, _temp2;
const dec = () => {};
let _Foo;
new (_temp = class extends babelHelpers.identity {
Expand All @@ -18,7 +18,7 @@ new (_temp2 = class extends babelHelpers.identity {
})(), 123))), _initClass2();
}
}, (_class3 => {
class Bar extends _Foo {}
class Bar extends (_Foo2 = _Foo) {}
_class3 = Bar;
[_Bar, _initClass2] = babelHelpers.applyDecs2305(_class3, [], [dec], 0, void 0, _Foo).c;
[_Bar, _initClass2] = babelHelpers.applyDecs2305(_class3, [], [dec], 0, void 0, _Foo2).c;
})(), _temp2)();
@@ -1,4 +1,4 @@
var _initClass, _A, _initClass2, _C, _initClass3, _D, _initClass4, _decorated_class, _initClass5, _G, _initClass6, _decorated_class2, _initClass7, _H, _initClass8, _K;
var _initClass, _A, _initClass2, _C, _initClass3, _D, _initClass4, _decorated_class, _initClass5, _G, _initClass6, _decorated_class2, _initClass7, _H, _I, _initClass8, _K, _L;
const dec = () => {};
const A = (new class extends babelHelpers.identity {
static {
Expand Down Expand Up @@ -73,9 +73,9 @@ const F = [(new class extends babelHelpers.identity {
}(), _decorated_class2)];
const H = (new class extends babelHelpers.identity {
static {
class H extends I {
class H extends (_I = I) {
static {
[_H, _initClass7] = babelHelpers.applyDecs2305(this, [], [dec], 0, void 0, I).c;
[_H, _initClass7] = babelHelpers.applyDecs2305(this, [], [dec], 0, void 0, _I).c;
}
}
}
Expand All @@ -85,9 +85,9 @@ const H = (new class extends babelHelpers.identity {
}(), _H);
const J = (new class extends babelHelpers.identity {
static {
class K extends L {
class K extends (_L = L) {
static {
[_K, _initClass8] = babelHelpers.applyDecs2305(this, [], [dec], 0, void 0, L).c;
[_K, _initClass8] = babelHelpers.applyDecs2305(this, [], [dec], 0, void 0, _L).c;
}
}
}
Expand Down
@@ -1,4 +1,4 @@
var _initClass, _A, _initClass2, _C, _initClass3, _D, _initClass4, _decorated_class, _initClass5, _G, _initClass6, _decorated_class2, _initClass7, _H, _initClass8, _K;
var _initClass, _A, _initClass2, _C, _initClass3, _D, _initClass4, _decorated_class, _initClass5, _G, _initClass6, _decorated_class2, _initClass7, _H, _I, _initClass8, _K, _L;
const dec = () => {};
const A = (class A {
static {
Expand Down Expand Up @@ -47,17 +47,17 @@ const F = [(class G {
_initClass6();
}
}, _decorated_class2)];
const H = (class H extends I {
const H = (class H extends (_I = I) {
static {
[_H, _initClass7] = babelHelpers.applyDecs2305(this, [], [dec], 0, void 0, I).c;
[_H, _initClass7] = babelHelpers.applyDecs2305(this, [], [dec], 0, void 0, _I).c;
}
static {
_initClass7();
}
}, _H);
const J = (class K extends L {
const J = (class K extends (_L = L) {
static {
[_K, _initClass8] = babelHelpers.applyDecs2305(this, [], [dec], 0, void 0, L).c;
[_K, _initClass8] = babelHelpers.applyDecs2305(this, [], [dec], 0, void 0, _L).c;
}
static {
_initClass8();
Expand Down
@@ -1,4 +1,4 @@
var _initClass, _dec, _initClass2, _dec2;
var _initClass, _dec, _initClass2, _dec2, _Bar2;
const dec = () => {};
let _Bar;
_dec = dec1;
Expand All @@ -12,9 +12,9 @@ class Bar {
}
let _Foo;
_dec2 = dec2;
class Foo extends _Bar {
class Foo extends (_Bar2 = _Bar) {
static {
[_Foo, _initClass2] = babelHelpers.applyDecs2305(this, [], [_dec2], 0, void 0, _Bar).c;
[_Foo, _initClass2] = babelHelpers.applyDecs2305(this, [], [_dec2], 0, void 0, _Bar2).c;
}
static {
_initClass2();
Expand Down
@@ -1,4 +1,4 @@
var _initClass, _initClass2;
var _initClass, _initClass2, _Foo2;
const dec = () => {};
let _Foo;
new class extends babelHelpers.identity {
Expand All @@ -17,9 +17,9 @@ new class extends babelHelpers.identity {
let _Bar;
new class extends babelHelpers.identity {
static {
class Bar extends _Foo {
class Bar extends (_Foo2 = _Foo) {
static {
[_Bar, _initClass2] = babelHelpers.applyDecs2305(this, [], [dec], 0, void 0, _Foo).c;
[_Bar, _initClass2] = babelHelpers.applyDecs2305(this, [], [dec], 0, void 0, _Foo2).c;
}
}
}
Expand Down
@@ -1,7 +1,7 @@
var _dec, _initProto, _class;
var _dec, _initProto, _B, _class;
const dec = () => {};
_dec = deco;
class A extends B {
class A extends (_B = B) {
constructor() {
let a = 2;
_initProto(super(a));
Expand All @@ -10,4 +10,4 @@ class A extends B {
method() {}
}
_class = A;
[_initProto] = babelHelpers.applyDecs2305(_class, [[_dec, 2, "method"]], [], 0, void 0, B).e;
[_initProto] = babelHelpers.applyDecs2305(_class, [[_dec, 2, "method"]], [], 0, void 0, _B).e;
@@ -1,9 +1,9 @@
var _dec, _initProto, _dec2, _initProto2;
var _dec, _initProto, _B, _dec2, _initProto2, _B2;
const dec = () => {};
_dec = deco;
class A extends B {
class A extends (_B = B) {
static {
[_initProto] = babelHelpers.applyDecs2305(this, [[_dec, 2, "method"]], [], 0, void 0, B).e;
[_initProto] = babelHelpers.applyDecs2305(this, [[_dec, 2, "method"]], [], 0, void 0, _B).e;
}
constructor() {
if (Math.random() > 0.5) {
Expand All @@ -15,9 +15,9 @@ class A extends B {
method() {}
}
_dec2 = deco;
class C extends B {
class C extends (_B2 = B) {
static {
[_initProto2] = babelHelpers.applyDecs2305(this, [[_dec2, 2, "method"]], [], 0, void 0, B).e;
[_initProto2] = babelHelpers.applyDecs2305(this, [[_dec2, 2, "method"]], [], 0, void 0, _B2).e;
}
constructor() {
try {
Expand Down
@@ -1,8 +1,8 @@
var _initProto;
var _initProto, _B;
const dec = () => {};
class A extends B {
class A extends (_B = B) {
static {
[_initProto] = babelHelpers.applyDecs2305(this, [[dec, 2, "method"]], [], 0, void 0, B).e;
[_initProto] = babelHelpers.applyDecs2305(this, [[dec, 2, "method"]], [], 0, void 0, _B).e;
}
constructor() {
let a = 2;
Expand Down
@@ -1,9 +1,9 @@
var _initClass;
var _initClass, _Bar;
const dec = () => {};
let _Foo;
class Foo extends Bar {
class Foo extends (_Bar = Bar) {
static {
[_Foo, _initClass] = babelHelpers.applyDecs2305(this, [], [dec], 0, void 0, Bar).c;
[_Foo, _initClass] = babelHelpers.applyDecs2305(this, [], [dec], 0, void 0, _Bar).c;
}
constructor() {
let foo = super();
Expand Down
@@ -1,10 +1,10 @@
var _call_x, _initProto;
var _call_x, _initProto, _Bar;
const dec = () => {};
class Foo extends Bar {
class Foo extends (_Bar = Bar) {
static {
[_call_x, _initProto] = babelHelpers.applyDecs2305(this, [[dec, 3, "x", function () {
return babelHelpers.get(babelHelpers.getPrototypeOf(Foo), "foo", this).call(this);
}]], [], 0, _ => #x in _, Bar).e;
}]], [], 0, _ => #x in _, _Bar).e;
}
constructor(...args) {
super(...args);
Expand Down
@@ -1,10 +1,10 @@
var _call_x, _initProto;
var _call_x, _initProto, _Bar;
const dec = () => {};
class Foo extends Bar {
class Foo extends (_Bar = Bar) {
static {
[_call_x, _initProto] = babelHelpers.applyDecs2305(this, [[dec, 2, "x", function () {
return babelHelpers.get(babelHelpers.getPrototypeOf(Foo), "foo", this).call(this);
}]], [], 0, _ => #x in _, Bar).e;
}]], [], 0, _ => #x in _, _Bar).e;
}
constructor(...args) {
super(...args);
Expand Down

0 comments on commit 004ef9e

Please sign in to comment.