Skip to content

Commit

Permalink
fix: wrap anonymous class expression within statement (#15113)
Browse files Browse the repository at this point in the history
  • Loading branch information
JLHwung committed Nov 3, 2022
1 parent 118a3b0 commit dee77fe
Show file tree
Hide file tree
Showing 11 changed files with 414 additions and 3 deletions.
Expand Up @@ -937,7 +937,12 @@ function transformClass(
class extends ${state.addHelper("identity")} {}
` as t.ClassExpression;
staticsClass.body.body = [
t.staticBlock([t.toStatement(path.node, false)]),
t.staticBlock([
t.toStatement(originalClass, true) ||
// If toStatement returns false, originalClass must be an anonymous ClassExpression,
// because `export default @dec ...` has been handled in the export visitor before.
t.expressionStatement(originalClass as t.ClassExpression),
]),
...statics,
];

Expand Down
@@ -0,0 +1,12 @@
const dec = () => {};
const A = @dec class A { static {} }
const B = @dec class C { static {} }
const D = @dec class { static {} }
const E = (@dec class { static {} }, 123);
const F = [@dec class G { static {} }, @dec class { static {} }];
const H = @dec class extends I { static {} };
const J = @dec class K extends L { static {} };

function classFactory() {
return @dec class { static {} }
}
@@ -0,0 +1,67 @@
var _initClass, _A, _temp, _initClass2, _C, _temp2, _initClass3, _D, _temp3, _initClass4, _decorated_class, _temp4, _class2, _initClass5, _G, _temp5, _initClass6, _decorated_class2, _temp6, _class3, _initClass7, _H, _temp7, _initClass8, _K, _temp8;
const dec = () => {};
const A = (new (_temp = class extends babelHelpers.identity {
constructor() {
super(_A), (() => {})(), _initClass();
}
}, (() => {
class A {}
[_A, _initClass] = babelHelpers.applyDecs(A, [], [dec]);
})(), _temp)(), _A);
const B = (new (_temp2 = class extends babelHelpers.identity {
constructor() {
super(_C), (() => {})(), _initClass2();
}
}, (() => {
class C {}
[_C, _initClass2] = babelHelpers.applyDecs(C, [], [dec]);
})(), _temp2)(), _C);
const D = (new (_temp3 = class extends babelHelpers.identity {
constructor() {
super(_D), (() => {})(), _initClass3();
}
}, (() => {
class D {}
[_D, _initClass3] = babelHelpers.applyDecs(D, [], [dec]);
})(), _temp3)(), _D);
const E = ((new (_temp4 = class extends babelHelpers.identity {
constructor() {
super(_decorated_class), (() => {})(), _initClass4();
}
}, (_class2 = class {}, [_decorated_class, _initClass4] = babelHelpers.applyDecs(_class2, [], [dec])), _temp4)(), _decorated_class), 123);
const F = [(new (_temp5 = class extends babelHelpers.identity {
constructor() {
super(_G), (() => {})(), _initClass5();
}
}, (() => {
class G {}
[_G, _initClass5] = babelHelpers.applyDecs(G, [], [dec]);
})(), _temp5)(), _G), (new (_temp6 = class extends babelHelpers.identity {
constructor() {
super(_decorated_class2), (() => {})(), _initClass6();
}
}, (_class3 = class {}, [_decorated_class2, _initClass6] = babelHelpers.applyDecs(_class3, [], [dec])), _temp6)(), _decorated_class2)];
const H = (new (_temp7 = class extends babelHelpers.identity {
constructor() {
super(_H), (() => {})(), _initClass7();
}
}, (() => {
class H extends I {}
[_H, _initClass7] = babelHelpers.applyDecs(H, [], [dec]);
})(), _temp7)(), _H);
const J = (new (_temp8 = class extends babelHelpers.identity {
constructor() {
super(_K), (() => {})(), _initClass8();
}
}, (() => {
class K extends L {}
[_K, _initClass8] = babelHelpers.applyDecs(K, [], [dec]);
})(), _temp8)(), _K);
function classFactory() {
var _initClass9, _decorated_class3, _temp9, _class5;
return new (_temp9 = class extends babelHelpers.identity {
constructor() {
super(_decorated_class3), (() => {})(), _initClass9();
}
}, (_class5 = class {}, [_decorated_class3, _initClass9] = babelHelpers.applyDecs(_class5, [], [dec])), _temp9)(), _decorated_class3;
}
@@ -0,0 +1,12 @@
const dec = () => {};
const A = @dec class A { static {} }
const B = @dec class C { static {} }
const D = @dec class { static {} }
const E = (@dec class { static {} }, 123);
const F = [@dec class G { static {} }, @dec class { static {} }];
const H = @dec class extends I { static {} };
const J = @dec class K extends L { static {} };

function classFactory() {
return @dec class { static {} }
}
@@ -0,0 +1,112 @@
var _initClass, _A, _initClass2, _C, _initClass3, _D, _initClass4, _decorated_class, _initClass5, _G, _initClass6, _decorated_class2, _initClass7, _H, _initClass8, _K;
const dec = () => {};
const A = (new class extends babelHelpers.identity {
static {
class A {
static {
[_A, _initClass] = babelHelpers.applyDecs(this, [], [dec]);
}
}
}
constructor() {
super(_A), (() => {})(), _initClass();
}
}(), _A);
const B = (new class extends babelHelpers.identity {
static {
class C {
static {
[_C, _initClass2] = babelHelpers.applyDecs(this, [], [dec]);
}
}
}
constructor() {
super(_C), (() => {})(), _initClass2();
}
}(), _C);
const D = (new class extends babelHelpers.identity {
static {
class D {
static {
[_D, _initClass3] = babelHelpers.applyDecs(this, [], [dec]);
}
}
}
constructor() {
super(_D), (() => {})(), _initClass3();
}
}(), _D);
const E = ((new class extends babelHelpers.identity {
static {
(class {
static {
[_decorated_class, _initClass4] = babelHelpers.applyDecs(this, [], [dec]);
}
});
}
constructor() {
super(_decorated_class), (() => {})(), _initClass4();
}
}(), _decorated_class), 123);
const F = [(new class extends babelHelpers.identity {
static {
class G {
static {
[_G, _initClass5] = babelHelpers.applyDecs(this, [], [dec]);
}
}
}
constructor() {
super(_G), (() => {})(), _initClass5();
}
}(), _G), (new class extends babelHelpers.identity {
static {
(class {
static {
[_decorated_class2, _initClass6] = babelHelpers.applyDecs(this, [], [dec]);
}
});
}
constructor() {
super(_decorated_class2), (() => {})(), _initClass6();
}
}(), _decorated_class2)];
const H = (new class extends babelHelpers.identity {
static {
class H extends I {
static {
[_H, _initClass7] = babelHelpers.applyDecs(this, [], [dec]);
}
}
}
constructor() {
super(_H), (() => {})(), _initClass7();
}
}(), _H);
const J = (new class extends babelHelpers.identity {
static {
class K extends L {
static {
[_K, _initClass8] = babelHelpers.applyDecs(this, [], [dec]);
}
}
}
constructor() {
super(_K), (() => {})(), _initClass8();
}
}(), _K);
function classFactory() {
var _initClass9, _decorated_class3;
return new class extends babelHelpers.identity {
static {
(class {
static {
[_decorated_class3, _initClass9] = babelHelpers.applyDecs(this, [], [dec]);
}
});
}
constructor() {
super(_decorated_class3), (() => {})(), _initClass9();
}
}(), _decorated_class3;
}
@@ -0,0 +1,12 @@
const dec = () => {};
const A = @dec class A { static {} }
const B = @dec class C { static {} }
const D = @dec class { static {} }
const E = (@dec class { static {} }, 123);
const F = [@dec class G { static {} }, @dec class { static {} }];
const H = @dec class extends I { static {} };
const J = @dec class K extends L { static {} };

function classFactory() {
return @dec class { static {} }
}
@@ -0,0 +1,67 @@
var _initClass, _A, _temp, _initClass2, _C, _temp2, _initClass3, _D, _temp3, _initClass4, _decorated_class, _temp4, _class2, _initClass5, _G, _temp5, _initClass6, _decorated_class2, _temp6, _class3, _initClass7, _H, _temp7, _initClass8, _K, _temp8;
const dec = () => {};
const A = (new (_temp = class extends babelHelpers.identity {
constructor() {
super(_A), (() => {})(), _initClass();
}
}, (() => {
class A {}
[_A, _initClass] = babelHelpers.applyDecs2203(A, [], [dec]);
})(), _temp)(), _A);
const B = (new (_temp2 = class extends babelHelpers.identity {
constructor() {
super(_C), (() => {})(), _initClass2();
}
}, (() => {
class C {}
[_C, _initClass2] = babelHelpers.applyDecs2203(C, [], [dec]);
})(), _temp2)(), _C);
const D = (new (_temp3 = class extends babelHelpers.identity {
constructor() {
super(_D), (() => {})(), _initClass3();
}
}, (() => {
class D {}
[_D, _initClass3] = babelHelpers.applyDecs2203(D, [], [dec]);
})(), _temp3)(), _D);
const E = ((new (_temp4 = class extends babelHelpers.identity {
constructor() {
super(_decorated_class), (() => {})(), _initClass4();
}
}, (_class2 = class {}, [_decorated_class, _initClass4] = babelHelpers.applyDecs2203(_class2, [], [dec])), _temp4)(), _decorated_class), 123);
const F = [(new (_temp5 = class extends babelHelpers.identity {
constructor() {
super(_G), (() => {})(), _initClass5();
}
}, (() => {
class G {}
[_G, _initClass5] = babelHelpers.applyDecs2203(G, [], [dec]);
})(), _temp5)(), _G), (new (_temp6 = class extends babelHelpers.identity {
constructor() {
super(_decorated_class2), (() => {})(), _initClass6();
}
}, (_class3 = class {}, [_decorated_class2, _initClass6] = babelHelpers.applyDecs2203(_class3, [], [dec])), _temp6)(), _decorated_class2)];
const H = (new (_temp7 = class extends babelHelpers.identity {
constructor() {
super(_H), (() => {})(), _initClass7();
}
}, (() => {
class H extends I {}
[_H, _initClass7] = babelHelpers.applyDecs2203(H, [], [dec]);
})(), _temp7)(), _H);
const J = (new (_temp8 = class extends babelHelpers.identity {
constructor() {
super(_K), (() => {})(), _initClass8();
}
}, (() => {
class K extends L {}
[_K, _initClass8] = babelHelpers.applyDecs2203(K, [], [dec]);
})(), _temp8)(), _K);
function classFactory() {
var _initClass9, _decorated_class3, _temp9, _class5;
return new (_temp9 = class extends babelHelpers.identity {
constructor() {
super(_decorated_class3), (() => {})(), _initClass9();
}
}, (_class5 = class {}, [_decorated_class3, _initClass9] = babelHelpers.applyDecs2203(_class5, [], [dec])), _temp9)(), _decorated_class3;
}
@@ -0,0 +1,12 @@
const dec = () => {};
const A = @dec class A { static {} }
const B = @dec class C { static {} }
const D = @dec class { static {} }
const E = (@dec class { static {} }, 123);
const F = [@dec class G { static {} }, @dec class { static {} }];
const H = @dec class extends I { static {} };
const J = @dec class K extends L { static {} };

function classFactory() {
return @dec class { static {} }
}

0 comments on commit dee77fe

Please sign in to comment.