@@ -481,18 +481,17 @@ namespace ts.server {
481
481
private eventPort : number | undefined ;
482
482
private eventSocket : NodeSocket | undefined ;
483
483
private socketEventQueue : { body : any , eventName : string } [ ] | undefined ;
484
+ /** No longer needed if syntax target is es6 or above. Any access to "this" before initialized will be a runtime error. */
484
485
private constructed : boolean | undefined ;
485
486
486
487
constructor ( ) {
487
- let isConstructed = false ;
488
488
const event : Event | undefined = ( body : object , eventName : string ) => {
489
- if ( isConstructed ) {
489
+ try {
490
490
this . event ( body , eventName ) ;
491
- }
492
- else {
493
- // It is unsafe to dereference `this` before initialization completes,
494
- // so we defer until the next tick.
495
- //
491
+ } catch ( e ) {
492
+ // ReferenceError: Must call super constructor in derived class before accessing 'this' or returning from derived constructor in ES6 or above
493
+ if ( ! ( e instanceof ReferenceError ) ) throw e ;
494
+ // It is unsafe to reference `this` before initialization completes, so we defer until the next tick.
496
495
// Construction should finish before the next tick fires, so we do not need to do this recursively.
497
496
// eslint-disable-next-line no-restricted-globals
498
497
setImmediate ( ( ) => this . event ( body , eventName ) ) ;
@@ -540,7 +539,6 @@ namespace ts.server {
540
539
}
541
540
542
541
this . constructed = true ;
543
- isConstructed = true ;
544
542
}
545
543
546
544
event < T extends object > ( body : T , eventName : string ) : void {
0 commit comments