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.
Original file line number Diff line number Diff line change
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
Original file line number Diff line number Diff line change
@@ -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
Original file line number Diff line number Diff line change
@@ -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
Original file line number Diff line number Diff line change
@@ -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
Original file line number Diff line number Diff line change
@@ -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.

Original file line number Diff line number Diff line change
@@ -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();
Original file line number Diff line number Diff line change
@@ -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)();
Original file line number Diff line number Diff line change
@@ -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
Original file line number Diff line number Diff line change
@@ -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
Original file line number Diff line number Diff line change
@@ -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
Original file line number Diff line number Diff line change
@@ -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
Original file line number Diff line number Diff line change
@@ -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;
Original file line number Diff line number Diff line change
@@ -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
Original file line number Diff line number Diff line change
@@ -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
Original file line number Diff line number Diff line change
@@ -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
Original file line number Diff line number Diff line change
@@ -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
Original file line number Diff line number Diff line change
@@ -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.