From d45098e23bfefa3ad92b5728df41451533ae7689 Mon Sep 17 00:00:00 2001 From: John Lusty <54030459+jlusty@users.noreply.github.com> Date: Wed, 20 Apr 2022 08:07:27 +0100 Subject: [PATCH] Update to match old TS version: parameter properties after prologue --- src/compiler/transformers/classFields.ts | 22 +++++++------------ ...ameterPropertiesAndPrivateFields.es2015.js | 4 ++-- 2 files changed, 10 insertions(+), 16 deletions(-) diff --git a/src/compiler/transformers/classFields.ts b/src/compiler/transformers/classFields.ts index 808534152e6..77e2d76bfdb 100644 --- a/src/compiler/transformers/classFields.ts +++ b/src/compiler/transformers/classFields.ts @@ -1359,22 +1359,16 @@ namespace ts { if (parameterPropertyDeclarationCount > 0) { const parameterProperties = visitNodes(constructor.body.statements, visitor, isStatement, indexOfFirstStatementAfterSuperAndPrologue, parameterPropertyDeclarationCount); - // If there was a super() call found, add parameter properties immediately after it - if (superStatementIndex >= 0) { - addRange(statements, parameterProperties); - } + let superAndPrologueStatementCount = prologueStatementCount; // If a synthetic super() call was added, add them just after it - else if (needsSyntheticConstructor) { - statements = [ - statements[0], - ...parameterProperties, - ...statements.slice(1), - ]; - } - // Since there wasn't a super() call, add them to the top of the constructor - else { - statements = [...parameterProperties, ...statements]; + if (needsSyntheticConstructor) { + superAndPrologueStatementCount += 1; } + statements = [ + ...statements.slice(0, superAndPrologueStatementCount), + ...parameterProperties, + ...statements.slice(superAndPrologueStatementCount), + ]; indexOfFirstStatementAfterSuperAndPrologue += parameterPropertyDeclarationCount; } diff --git a/tests/baselines/reference/constructorWithParameterPropertiesAndPrivateFields.es2015.js b/tests/baselines/reference/constructorWithParameterPropertiesAndPrivateFields.es2015.js index 19e3379b05a..9d2e2e71697 100644 --- a/tests/baselines/reference/constructorWithParameterPropertiesAndPrivateFields.es2015.js +++ b/tests/baselines/reference/constructorWithParameterPropertiesAndPrivateFields.es2015.js @@ -45,8 +45,8 @@ var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function ( var _A_privateField, _B_privateField; class A { constructor(arg, exposedField) { - this.exposedField = exposedField; var _a; + this.exposedField = exposedField; _A_privateField.set(this, void 0); (_a = this, { key: ({ set value(_b) { __classPrivateFieldSet(_a, _A_privateField, _b, "f"); } }).value } = arg); } @@ -58,9 +58,9 @@ class A { _A_privateField = new WeakMap(); class B { constructor(arg, exposedField) { - this.exposedField = exposedField; "prologue"; var _a; + this.exposedField = exposedField; _B_privateField.set(this, void 0); (_a = this, { key: ({ set value(_b) { __classPrivateFieldSet(_a, _B_privateField, _b, "f"); } }).value } = arg); }