Skip to content

Commit

Permalink
Fix decorator this memoization (#16279)
Browse files Browse the repository at this point in the history
  • Loading branch information
JLHwung authored and nicolo-ribaudo committed Feb 26, 2024
1 parent 40df794 commit 2618875
Show file tree
Hide file tree
Showing 15 changed files with 101 additions and 83 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -930,18 +930,10 @@ function transformClass(
t.isSuper(expression.object) ||
t.isThisExpression(expression.object)
) {
needMemoise = true;
if (memoiseInPlace) {
object = memoiseExpression(t.thisExpression(), "obj");
} else {
object = t.thisExpression();
}
object = memoiseExpression(t.thisExpression(), "obj");
} else {
if (!scopeParent.isStatic(expression.object)) {
needMemoise = true;
if (memoiseInPlace) {
expression.object = memoiseExpression(expression.object, "obj");
}
expression.object = memoiseExpression(expression.object, "obj");
}
object = t.cloneNode(expression.object);
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,8 +1,9 @@
class A extends B {
m() {
var _initProto, _initClass, _classDecs, _obj, _dec, _C2;
_classDecs = [this, super.dec1];
var _initProto, _initClass, _obj, _classDecs, _obj2, _dec, _C2;
_obj = this;
_classDecs = [_obj, super.dec1];
_obj2 = this;
_dec = super.dec2;
let _C;
class C {
Expand All @@ -15,7 +16,7 @@ class A extends B {
({
e: [_initProto],
c: [_C, _initClass]
} = babelHelpers.applyDecs2305(_C2, [[[_obj, _dec], 18, "m2"]], _classDecs, 1));
} = babelHelpers.applyDecs2305(_C2, [[[_obj2, _dec], 18, "m2"]], _classDecs, 1));
_initClass();
}
}
Original file line number Diff line number Diff line change
@@ -1,11 +1,13 @@
var _initClass, _classDecs, _obj, _dec, _obj2, _dec2, _init_x, _obj3, _dec3, _dec4, _init_y, _A2;
_classDecs = [o1, o1.dec, void 0, dec, o2, o2.dec];
_obj = o2;
_dec = _obj.dec;
_obj2 = o3.o;
_dec2 = _obj2.dec;
var _initClass, _obj, _obj2, _classDecs, _obj3, _dec, _obj4, _dec2, _init_x, _obj5, _dec3, _dec4, _init_y, _A2;
_obj = o1;
_obj2 = o2;
_classDecs = [_obj, _obj.dec, void 0, dec, _obj2, _obj2.dec];
_obj3 = o2;
_dec3 = _obj3.dec;
_dec = _obj3.dec;
_obj4 = o3.o;
_dec2 = _obj4.dec;
_obj5 = o2;
_dec3 = _obj5.dec;
_dec4 = dec;
let _A;
class A {
Expand All @@ -18,5 +20,5 @@ _A2 = A;
({
e: [_init_x, _init_y],
c: [_A, _initClass]
} = babelHelpers.applyDecs2305(_A2, [[[_obj, _dec, _obj2, _dec2], 16, "x"], [[_obj3, _dec3, void 0, _dec4], 16, "y"]], _classDecs, 1));
} = babelHelpers.applyDecs2305(_A2, [[[_obj3, _dec, _obj4, _dec2], 16, "x"], [[_obj5, _dec3, void 0, _dec4], 16, "y"]], _classDecs, 1));
_initClass();
Original file line number Diff line number Diff line change
@@ -1,11 +1,12 @@
var _initProto, _initClass, _classDecs, _dec, _dec2, _dec3, _obj, _dec4, _Foo2;
var _initProto, _initClass, _obj, _classDecs, _dec, _dec2, _dec3, _obj2, _dec4, _Foo2;
const dec = () => {};
_classDecs = [void 0, dec, void 0, call(), void 0, chain.expr(), void 0, arbitrary + expr, array, array[expr]];
_obj = array;
_classDecs = [void 0, dec, void 0, call(), void 0, chain.expr(), void 0, arbitrary + expr, _obj, _obj[expr]];
_dec = call();
_dec2 = chain.expr();
_dec3 = arbitrary + expr;
_obj = array;
_dec4 = _obj[expr];
_obj2 = array;
_dec4 = _obj2[expr];
let _Foo;
var _a = /*#__PURE__*/new WeakMap();
class Foo {
Expand All @@ -26,5 +27,5 @@ _Foo2 = Foo;
({
e: [_initProto],
c: [_Foo, _initClass]
} = babelHelpers.applyDecs2305(_Foo2, [[[void 0, dec, void 0, _dec, void 0, _dec2, void 0, _dec3, _obj, _dec4], 18, "method"]], _classDecs, 1));
} = babelHelpers.applyDecs2305(_Foo2, [[[void 0, dec, void 0, _dec, void 0, _dec2, void 0, _dec3, _obj2, _dec4], 18, "method"]], _classDecs, 1));
_initClass();
Original file line number Diff line number Diff line change
@@ -1,16 +1,17 @@
class A extends B {
m() {
var _initProto, _initClass, _classDecs, _obj, _dec;
_classDecs = [this, super.dec1];
var _initProto, _initClass, _obj, _classDecs, _obj2, _dec;
_obj = this;
_classDecs = [_obj, super.dec1];
_obj2 = this;
_dec = super.dec2;
let _C;
class C {
static {
({
e: [_initProto],
c: [_C, _initClass]
} = babelHelpers.applyDecs2305(this, [[[_obj, _dec], 18, "m2"]], _classDecs, 1));
} = babelHelpers.applyDecs2305(this, [[[_obj2, _dec], 18, "m2"]], _classDecs, 1));
}
constructor() {
_initProto(this);
Expand Down
Original file line number Diff line number Diff line change
@@ -1,19 +1,21 @@
var _initClass, _classDecs, _obj, _dec, _obj2, _dec2, _init_x, _obj3, _dec3, _dec4, _init_y;
_classDecs = [o1, o1.dec, void 0, dec, o2, o2.dec];
_obj = o2;
_dec = _obj.dec;
_obj2 = o3.o;
_dec2 = _obj2.dec;
var _initClass, _obj, _obj2, _classDecs, _obj3, _dec, _obj4, _dec2, _init_x, _obj5, _dec3, _dec4, _init_y;
_obj = o1;
_obj2 = o2;
_classDecs = [_obj, _obj.dec, void 0, dec, _obj2, _obj2.dec];
_obj3 = o2;
_dec3 = _obj3.dec;
_dec = _obj3.dec;
_obj4 = o3.o;
_dec2 = _obj4.dec;
_obj5 = o2;
_dec3 = _obj5.dec;
_dec4 = dec;
let _A;
class A {
static {
({
e: [_init_x, _init_y],
c: [_A, _initClass]
} = babelHelpers.applyDecs2305(this, [[[_obj, _dec, _obj2, _dec2], 16, "x"], [[_obj3, _dec3, void 0, _dec4], 16, "y"]], _classDecs, 1));
} = babelHelpers.applyDecs2305(this, [[[_obj3, _dec, _obj4, _dec2], 16, "x"], [[_obj5, _dec3, void 0, _dec4], 16, "y"]], _classDecs, 1));
}
x = _init_x(this);
y = _init_y(this);
Expand Down
Original file line number Diff line number Diff line change
@@ -1,26 +1,27 @@
var _initProto, _initClass, _classDecs, _dec, _dec2, _dec3, _obj, _dec4;
var _initProto, _initClass, _obj, _classDecs, _dec, _dec2, _dec3, _obj2, _dec4;
const dec = () => {};
_classDecs = [void 0, dec, void 0, call(), void 0, chain.expr(), void 0, arbitrary + expr, array, array[expr]];
_obj = array;
_classDecs = [void 0, dec, void 0, call(), void 0, chain.expr(), void 0, arbitrary + expr, _obj, _obj[expr]];
_dec = call();
_dec2 = chain.expr();
_dec3 = arbitrary + expr;
_obj = array;
_dec4 = _obj[expr];
_obj2 = array;
_dec4 = _obj2[expr];
let _Foo;
class Foo {
static {
({
e: [_initProto],
c: [_Foo, _initClass]
} = babelHelpers.applyDecs2305(this, [[[void 0, dec, void 0, _dec, void 0, _dec2, void 0, _dec3, _obj, _dec4], 18, "method"]], _classDecs, 1));
} = babelHelpers.applyDecs2305(this, [[[void 0, dec, void 0, _dec, void 0, _dec2, void 0, _dec3, _obj2, _dec4], 18, "method"]], _classDecs, 1));
}
#a = void _initProto(this);
method() {}
makeClass() {
var _obj2, _dec5, _init_bar;
return _obj2 = this, _dec5 = this.#a, class Nested {
var _obj3, _dec5, _init_bar;
return _obj3 = this, _dec5 = this.#a, class Nested {
static {
[_init_bar] = babelHelpers.applyDecs2305(this, [[[_obj2, _dec5], 16, "bar"]], []).e;
[_init_bar] = babelHelpers.applyDecs2305(this, [[[_obj3, _dec5], 16, "bar"]], []).e;
}
bar = _init_bar(this);
};
Expand Down
Original file line number Diff line number Diff line change
@@ -1,8 +1,9 @@
class A extends B {
m() {
var _initProto, _initClass, _classDecs, _obj, _dec, _C2;
_classDecs = [this, super.dec1];
var _initProto, _initClass, _obj, _classDecs, _obj2, _dec, _C2;
_obj = this;
_classDecs = [_obj, super.dec1];
_obj2 = this;
_dec = super.dec2;
let _C;
class C {
Expand All @@ -15,7 +16,7 @@ class A extends B {
({
e: [_initProto],
c: [_C, _initClass]
} = babelHelpers.applyDecs2311(_C2, [[[_obj, _dec], 18, "m2"]], _classDecs, 1));
} = babelHelpers.applyDecs2311(_C2, [[[_obj2, _dec], 18, "m2"]], _classDecs, 1));
_initClass();
}
}
Original file line number Diff line number Diff line change
@@ -1,11 +1,13 @@
var _initClass, _classDecs, _obj, _dec, _obj2, _dec2, _init_x, _init_extra_x, _obj3, _dec3, _dec4, _init_y, _init_extra_y, _A2;
_classDecs = [o1, o1.dec, void 0, dec, o2, o2.dec];
_obj = o2;
_dec = _obj.dec;
_obj2 = o3.o;
_dec2 = _obj2.dec;
var _initClass, _obj, _obj2, _classDecs, _obj3, _dec, _obj4, _dec2, _init_x, _init_extra_x, _obj5, _dec3, _dec4, _init_y, _init_extra_y, _A2;
_obj = o1;
_obj2 = o2;
_classDecs = [_obj, _obj.dec, void 0, dec, _obj2, _obj2.dec];
_obj3 = o2;
_dec3 = _obj3.dec;
_dec = _obj3.dec;
_obj4 = o3.o;
_dec2 = _obj4.dec;
_obj5 = o2;
_dec3 = _obj5.dec;
_dec4 = dec;
let _A;
class A {
Expand All @@ -19,5 +21,5 @@ _A2 = A;
({
e: [_init_x, _init_extra_x, _init_y, _init_extra_y],
c: [_A, _initClass]
} = babelHelpers.applyDecs2311(_A2, [[[_obj, _dec, _obj2, _dec2], 16, "x"], [[_obj3, _dec3, void 0, _dec4], 16, "y"]], _classDecs, 1));
} = babelHelpers.applyDecs2311(_A2, [[[_obj3, _dec, _obj4, _dec2], 16, "x"], [[_obj5, _dec3, void 0, _dec4], 16, "y"]], _classDecs, 1));
_initClass();
Original file line number Diff line number Diff line change
@@ -1,11 +1,12 @@
var _initProto, _initClass, _classDecs, _dec, _dec2, _dec3, _obj, _dec4, _Foo2;
var _initProto, _initClass, _obj, _classDecs, _dec, _dec2, _dec3, _obj2, _dec4, _Foo2;
const dec = () => {};
_classDecs = [void 0, dec, void 0, call(), void 0, chain.expr(), void 0, arbitrary + expr, array, array[expr]];
_obj = array;
_classDecs = [void 0, dec, void 0, call(), void 0, chain.expr(), void 0, arbitrary + expr, _obj, _obj[expr]];
_dec = call();
_dec2 = chain.expr();
_dec3 = arbitrary + expr;
_obj = array;
_dec4 = _obj[expr];
_obj2 = array;
_dec4 = _obj2[expr];
let _Foo;
var _a = /*#__PURE__*/new WeakMap();
class Foo {
Expand All @@ -27,5 +28,5 @@ _Foo2 = Foo;
({
e: [_initProto],
c: [_Foo, _initClass]
} = babelHelpers.applyDecs2311(_Foo2, [[[void 0, dec, void 0, _dec, void 0, _dec2, void 0, _dec3, _obj, _dec4], 18, "method"]], _classDecs, 1));
} = babelHelpers.applyDecs2311(_Foo2, [[[void 0, dec, void 0, _dec, void 0, _dec2, void 0, _dec3, _obj2, _dec4], 18, "method"]], _classDecs, 1));
_initClass();
Original file line number Diff line number Diff line change
@@ -1,16 +1,17 @@
class A extends B {
m() {
var _initProto, _initClass, _classDecs, _obj, _dec;
_classDecs = [this, super.dec1];
var _initProto, _initClass, _obj, _classDecs, _obj2, _dec;
_obj = this;
_classDecs = [_obj, super.dec1];
_obj2 = this;
_dec = super.dec2;
let _C;
class C {
static {
({
e: [_initProto],
c: [_C, _initClass]
} = babelHelpers.applyDecs2311(this, [[[_obj, _dec], 18, "m2"]], _classDecs, 1));
} = babelHelpers.applyDecs2311(this, [[[_obj2, _dec], 18, "m2"]], _classDecs, 1));
}
constructor() {
_initProto(this);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,18 +9,23 @@ function dec() {
let o1 = { dec };
let o2 = { dec };
let o3 = { o: { dec } };
let o4oCounter = 0;
let o4 = { o() { o4oCounter++; return o1 } };

@o1.dec
@dec
@o2.dec
@(o4.o().dec)
class A {
@o2.dec
@o3.o.dec
@(o4.o().dec)
x;

@o2.dec
@dec
y;
}

expect(_this).toEqual([o3.o, o2, undefined, o2, o2, undefined, o1]);
expect(_this).toEqual([o1, o3.o, o2, undefined, o2, o1, o2, undefined, o1]);
expect(o4oCounter).toBe(2);
Original file line number Diff line number Diff line change
@@ -1,9 +1,11 @@
@o1.dec
@dec
@o2.dec
@(o4.o().dec)
class A {
@o2.dec
@o3.o.dec
@(o4.o().dec)
x;

@o2.dec
Expand Down
Original file line number Diff line number Diff line change
@@ -1,19 +1,24 @@
var _initClass, _classDecs, _obj, _dec, _obj2, _dec2, _init_x, _init_extra_x, _obj3, _dec3, _dec4, _init_y, _init_extra_y;
_classDecs = [o1, o1.dec, void 0, dec, o2, o2.dec];
_obj = o2;
_dec = _obj.dec;
_obj2 = o3.o;
_dec2 = _obj2.dec;
_obj3 = o2;
_dec3 = _obj3.dec;
_dec4 = dec;
var _initClass, _obj, _obj2, _obj3, _classDecs, _obj4, _dec, _obj5, _dec2, _obj6, _dec3, _init_x, _init_extra_x, _obj7, _dec4, _dec5, _init_y, _init_extra_y;
_obj = o1;
_obj2 = o2;
_obj3 = o4.o();
_classDecs = [_obj, _obj.dec, void 0, dec, _obj2, _obj2.dec, _obj3, _obj3.dec];
_obj4 = o2;
_dec = _obj4.dec;
_obj5 = o3.o;
_dec2 = _obj5.dec;
_obj6 = o4.o();
_dec3 = _obj6.dec;
_obj7 = o2;
_dec4 = _obj7.dec;
_dec5 = dec;
let _A;
class A {
static {
({
e: [_init_x, _init_extra_x, _init_y, _init_extra_y],
c: [_A, _initClass]
} = babelHelpers.applyDecs2311(this, [[[_obj, _dec, _obj2, _dec2], 16, "x"], [[_obj3, _dec3, void 0, _dec4], 16, "y"]], _classDecs, 1));
} = babelHelpers.applyDecs2311(this, [[[_obj4, _dec, _obj5, _dec2, _obj6, _dec3], 16, "x"], [[_obj7, _dec4, void 0, _dec5], 16, "y"]], _classDecs, 1));
}
constructor() {
_init_extra_y(this);
Expand Down
Original file line number Diff line number Diff line change
@@ -1,26 +1,27 @@
var _initProto, _initClass, _classDecs, _dec, _dec2, _dec3, _obj, _dec4;
var _initProto, _initClass, _obj, _classDecs, _dec, _dec2, _dec3, _obj2, _dec4;
const dec = () => {};
_classDecs = [void 0, dec, void 0, call(), void 0, chain.expr(), void 0, arbitrary + expr, array, array[expr]];
_obj = array;
_classDecs = [void 0, dec, void 0, call(), void 0, chain.expr(), void 0, arbitrary + expr, _obj, _obj[expr]];
_dec = call();
_dec2 = chain.expr();
_dec3 = arbitrary + expr;
_obj = array;
_dec4 = _obj[expr];
_obj2 = array;
_dec4 = _obj2[expr];
let _Foo;
class Foo {
static {
({
e: [_initProto],
c: [_Foo, _initClass]
} = babelHelpers.applyDecs2311(this, [[[void 0, dec, void 0, _dec, void 0, _dec2, void 0, _dec3, _obj, _dec4], 18, "method"]], _classDecs, 1));
} = babelHelpers.applyDecs2311(this, [[[void 0, dec, void 0, _dec, void 0, _dec2, void 0, _dec3, _obj2, _dec4], 18, "method"]], _classDecs, 1));
}
#a = void _initProto(this);
method() {}
makeClass() {
var _obj2, _dec5, _init_bar, _init_extra_bar;
return _obj2 = this, _dec5 = this.#a, class Nested {
var _obj3, _dec5, _init_bar, _init_extra_bar;
return _obj3 = this, _dec5 = this.#a, class Nested {
static {
[_init_bar, _init_extra_bar] = babelHelpers.applyDecs2311(this, [[[_obj2, _dec5], 16, "bar"]], []).e;
[_init_bar, _init_extra_bar] = babelHelpers.applyDecs2311(this, [[[_obj3, _dec5], 16, "bar"]], []).e;
}
constructor() {
_init_extra_bar(this);
Expand Down

0 comments on commit 2618875

Please sign in to comment.