Skip to content

Commit 304864c

Browse files
committed
Change prologue generation order; object rest back in prologue
1 parent 458e878 commit 304864c

3 files changed

Lines changed: 10 additions & 13 deletions

File tree

src/compiler/factory.ts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2599,7 +2599,6 @@ namespace ts {
25992599
* @param visitor: Optional callback used to visit any custom prologue directives.
26002600
*/
26012601
export function addPrologueDirectives(target: Statement[], source: Statement[], ensureUseStrict?: boolean, visitor?: (node: Node) => VisitResult<Node>): number {
2602-
Debug.assert(target.length === 0, "Prologue directives should be at the first statement in the target statements array");
26032602
let foundUseStrict = false;
26042603
let statementOffset = 0;
26052604
const numStatements = source.length;

src/compiler/transformers/es2015.ts

Lines changed: 9 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -507,8 +507,8 @@ namespace ts {
507507
const ancestorFacts = enterSubtree(HierarchyFacts.SourceFileExcludes, HierarchyFacts.SourceFileIncludes);
508508
const statements: Statement[] = [];
509509
startLexicalEnvironment();
510-
const statementOffset = addPrologueDirectives(statements, node.statements, /*ensureUseStrict*/ false, visitor);
511510
addCaptureThisForNodeIfNeeded(statements, node);
511+
const statementOffset = addPrologueDirectives(statements, node.statements, /*ensureUseStrict*/ false, visitor);
512512
addRange(statements, visitNodes(node.statements, visitor, isStatement, statementOffset));
513513
addRange(statements, endLexicalEnvironment());
514514
exitSubtree(ancestorFacts, HierarchyFacts.None, HierarchyFacts.None);
@@ -915,14 +915,14 @@ namespace ts {
915915
// The assumption is that no prior step in the pipeline has added any prologue directives.
916916
statementOffset = 0;
917917
}
918-
else if (constructor) {
919-
// Otherwise, try to emit all potential prologue directives first.
920-
statementOffset = addPrologueDirectives(statements, constructor.body.statements, /*ensureUseStrict*/ false, visitor);
921-
}
922918

923919
if (constructor) {
924920
addDefaultValueAssignmentsIfNeeded(statements, constructor);
925921
addRestParameterIfNeeded(statements, constructor, hasSynthesizedSuper);
922+
if (!hasSynthesizedSuper) {
923+
// If no super call has been synthesized, try to emit all potential prologue directives.
924+
statementOffset = addPrologueDirectives(statements, constructor.body.statements, /*ensureUseStrict*/ false, visitor);
925+
}
926926
Debug.assert(statementOffset >= 0, "statementOffset not initialized correctly!");
927927

928928
}
@@ -1806,15 +1806,8 @@ namespace ts {
18061806

18071807
const statements: Statement[] = [];
18081808
const body = node.body;
1809-
let statementOffset: number;
18101809

18111810
resumeLexicalEnvironment();
1812-
if (isBlock(body)) {
1813-
// ensureUseStrict is false because no new prologue-directive should be added.
1814-
// addPrologueDirectives will simply put already-existing directives at the beginning of the target statement-array
1815-
statementOffset = addPrologueDirectives(statements, body.statements, /*ensureUseStrict*/ false, visitor);
1816-
}
1817-
18181811
addCaptureThisForNodeIfNeeded(statements, node);
18191812
addDefaultValueAssignmentsIfNeeded(statements, node);
18201813
addRestParameterIfNeeded(statements, node, /*inConstructorWithSynthesizedSuper*/ false);
@@ -1825,6 +1818,10 @@ namespace ts {
18251818
}
18261819

18271820
if (isBlock(body)) {
1821+
// ensureUseStrict is false because no new prologue-directive should be added.
1822+
// addPrologueDirectives will simply put already-existing directives at the beginning of the target statement-array
1823+
const statementOffset = addPrologueDirectives(statements, body.statements, /*ensureUseStrict*/ false, visitor);
1824+
18281825
statementsLocation = body.statements;
18291826
addRange(statements, visitNodes(body.statements, visitor, isStatement, statementOffset));
18301827

src/compiler/transformers/esnext.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -375,6 +375,7 @@ namespace ts {
375375
declarations
376376
)
377377
);
378+
setEmitFlags(statement, EmitFlags.CustomPrologue);
378379
leadingStatements = append(leadingStatements, statement);
379380
}
380381
}

0 commit comments

Comments
 (0)