@@ -515,8 +515,9 @@ namespace ts {
515515 const ancestorFacts = enterSubtree ( HierarchyFacts . SourceFileExcludes , HierarchyFacts . SourceFileIncludes ) ;
516516 const statements : Statement [ ] = [ ] ;
517517 startLexicalEnvironment ( ) ;
518- const statementOffset = addPrologueDirectives ( statements , node . statements , /*ensureUseStrict*/ false , visitor ) ;
518+ let statementOffset = addStandardPrologue ( statements , node . statements , /*ensureUseStrict*/ false ) ;
519519 addCaptureThisForNodeIfNeeded ( statements , node ) ;
520+ statementOffset = addCustomPrologue ( statements , node . statements , statementOffset , visitor ) ;
520521 addRange ( statements , visitNodes ( node . statements , visitor , isStatement , statementOffset ) ) ;
521522 addRange ( statements , endLexicalEnvironment ( ) ) ;
522523 exitSubtree ( ancestorFacts , HierarchyFacts . None , HierarchyFacts . None ) ;
@@ -924,13 +925,16 @@ namespace ts {
924925 statementOffset = 0 ;
925926 }
926927 else if ( constructor ) {
927- // Otherwise, try to emit all potential prologue directives first.
928- statementOffset = addPrologueDirectives ( statements , constructor . body . statements , /*ensureUseStrict*/ false , visitor ) ;
928+ statementOffset = addStandardPrologue ( statements , constructor . body . statements , /*ensureUseStrict*/ false ) ;
929929 }
930930
931931 if ( constructor ) {
932932 addDefaultValueAssignmentsIfNeeded ( statements , constructor ) ;
933933 addRestParameterIfNeeded ( statements , constructor , hasSynthesizedSuper ) ;
934+ if ( ! hasSynthesizedSuper ) {
935+ // If no super call has been synthesized, emit custom prologue directives.
936+ statementOffset = addCustomPrologue ( statements , constructor . body . statements , statementOffset , visitor ) ;
937+ }
934938 Debug . assert ( statementOffset >= 0 , "statementOffset not initialized correctly!" ) ;
935939
936940 }
@@ -1821,8 +1825,8 @@ namespace ts {
18211825 resumeLexicalEnvironment ( ) ;
18221826 if ( isBlock ( body ) ) {
18231827 // ensureUseStrict is false because no new prologue-directive should be added.
1824- // addPrologueDirectives will simply put already-existing directives at the beginning of the target statement-array
1825- statementOffset = addPrologueDirectives ( statements , body . statements , /*ensureUseStrict*/ false , visitor ) ;
1828+ // addStandardPrologue will put already-existing directives at the beginning of the target statement-array
1829+ statementOffset = addStandardPrologue ( statements , body . statements , /*ensureUseStrict*/ false ) ;
18261830 }
18271831
18281832 addCaptureThisForNodeIfNeeded ( statements , node ) ;
@@ -1835,6 +1839,9 @@ namespace ts {
18351839 }
18361840
18371841 if ( isBlock ( body ) ) {
1842+ // addCustomPrologue puts already-existing directives at the beginning of the target statement-array
1843+ statementOffset = addCustomPrologue ( statements , body . statements , statementOffset , visitor ) ;
1844+
18381845 statementsLocation = body . statements ;
18391846 addRange ( statements , visitNodes ( body . statements , visitor , isStatement , statementOffset ) ) ;
18401847
0 commit comments