assert_this_initialized check fired before super()
Describe the bug
In some cases _assert_this_initialized fires before super() call which causes ReferenceError: this hasn't been initialised - super() hasn't been called
Input code
class Test0 {}
class Test extends Test0 {
constructor() {
super(),
console.log(async (e) => {
await this.test();
});
}
}
Config
{
"jsc": {
"parser": {
"syntax": "ecmascript",
"dynamicImport": true,
"tsx": true,
"jsx": true
},
"loose": false,
"externalHelpers": true
},
"env": {
"targets": "> 0.25%, not dead, Safari >=8",
"mode": "entry",
"coreJs": "3.27",
"loose": false,
"bugfixes": true
}
}
Playground link (or link to the minimal reproduction)
https://play.swc.rs/?version=1.3.100&code=H4sIAAAAAAAAAz2MwQqDMBBE7%2FsVc0ygiHfRr%2BgPhHVphZAUd6UVyb9rozineTPDcAyqeIpai60Q8c2Qn0ka75IAzkltXtjy7HxNAF0%2BctCjwjnJUZqYXy7omhhOPPrhWv8VvmEy2HvSxo5r57urKtUVKrQDPuJyYpYAAAA%3D&config=H4sIAAAAAAAAA32PzQrCQAyE732KJeCtFFFEEexZvfoEcZuWlna3ZKO0lL67a%2B2PePCW%2BWYSJl2gFBROw1F1fvSiRnbEs%2FbEtUaw8QRIV%2Bg057VAOLlJa7DK9aWqLYsPCT9oNsU1v6iY0UD6jwGltY68kWLpxjBQI8QGyzOVNbFb1oYlIPNcagtyRvLOQKzW0Wa3CpWxohLCJFQ3TJFzFZ8OY3GobELDS0a4naC2TNfhxjba7OFPtfsjS%2FOGvjsF%2FQv6%2BI68TQEAAA%3D%3D
SWC Info output
No response
Expected behavior
var _this;
_this = _super.call(this);
var _this1 = _assert_this_initialized(_this);
Compiles well if i use super(); instead of super(),
Actual behavior
var _this;
var _this1 = _assert_this_initialized(_this);
_this = _super.call(this),
Version
1.3.101
Additional context
No response
@shredor did you get solution for this ? I am not sure if my use case is related, for me when i use swc/jest the _callUpdate() method from the reactive-element inside lit-element is not at all getting triggered, resulting in failing tests across the codebase
@gethari
class Test0 {}
class Test extends Test0 {
constructor() {
super();
console.log(async (e) => {
await this.test();
});
}
}
works
I tried fixing it, but I concluded that it's not important, as this is only about sequential expressions.
@gethari My use case was compiling js for legacy browsers:
- I have compiled js script for modern browsers
- I compile it again with swc for legacy browsers
- Use legacy js as a fallback when i detect legacy browser
My solution was to disable minification at step 1 so now it compiles well