Cherry-pick PR #48765 into release-4.6 (#48780)

Component commits:
1b9a9d8312 Fix transformed constructor code when there is code between prologue statements and super call

Co-authored-by: Patrick Szmucer <pszmucer@palantir.com>
This commit is contained in:
TypeScript Bot 2022-05-03 12:29:38 -07:00 committed by GitHub
parent c242d4a46b
commit 79b02a6726
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 140 additions and 1 deletions

View File

@ -1146,7 +1146,7 @@ namespace ts {
[
...existingPrologue,
...prologue,
...(superStatementIndex <= existingPrologue.length ? emptyArray : visitNodes(constructor.body.statements, visitor, isStatement, existingPrologue.length, superStatementIndex)),
...(superStatementIndex <= existingPrologue.length ? emptyArray : visitNodes(constructor.body.statements, visitor, isStatement, existingPrologue.length, superStatementIndex - existingPrologue.length)),
...statements
]
),

View File

@ -0,0 +1,52 @@
//// [constructorWithSuperAndPrologue.es5.ts]
// https://github.com/microsoft/TypeScript/issues/48761
"use strict";
class A {
public constructor() {
console.log("A")
}
}
class B extends A {
constructor() {
"ngInject";
console.log("B")
super();
}
}
//// [constructorWithSuperAndPrologue.es5.js]
// https://github.com/microsoft/TypeScript/issues/48761
"use strict";
var __extends = (this && this.__extends) || (function () {
var extendStatics = function (d, b) {
extendStatics = Object.setPrototypeOf ||
({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };
return extendStatics(d, b);
};
return function (d, b) {
if (typeof b !== "function" && b !== null)
throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");
extendStatics(d, b);
function __() { this.constructor = d; }
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
};
})();
var A = /** @class */ (function () {
function A() {
console.log("A");
}
return A;
}());
var B = /** @class */ (function (_super) {
__extends(B, _super);
function B() {
"ngInject";
console.log("B");
return _super.call(this) || this;
}
return B;
}(A));

View File

@ -0,0 +1,31 @@
=== tests/cases/compiler/constructorWithSuperAndPrologue.es5.ts ===
// https://github.com/microsoft/TypeScript/issues/48761
"use strict";
class A {
>A : Symbol(A, Decl(constructorWithSuperAndPrologue.es5.ts, 1, 13))
public constructor() {
console.log("A")
>console.log : Symbol(Console.log, Decl(lib.dom.d.ts, --, --))
>console : Symbol(console, Decl(lib.dom.d.ts, --, --))
>log : Symbol(Console.log, Decl(lib.dom.d.ts, --, --))
}
}
class B extends A {
>B : Symbol(B, Decl(constructorWithSuperAndPrologue.es5.ts, 7, 1))
>A : Symbol(A, Decl(constructorWithSuperAndPrologue.es5.ts, 1, 13))
constructor() {
"ngInject";
console.log("B")
>console.log : Symbol(Console.log, Decl(lib.dom.d.ts, --, --))
>console : Symbol(console, Decl(lib.dom.d.ts, --, --))
>log : Symbol(Console.log, Decl(lib.dom.d.ts, --, --))
super();
>super : Symbol(A, Decl(constructorWithSuperAndPrologue.es5.ts, 1, 13))
}
}

View File

@ -0,0 +1,39 @@
=== tests/cases/compiler/constructorWithSuperAndPrologue.es5.ts ===
// https://github.com/microsoft/TypeScript/issues/48761
"use strict";
>"use strict" : "use strict"
class A {
>A : A
public constructor() {
console.log("A")
>console.log("A") : void
>console.log : (...data: any[]) => void
>console : Console
>log : (...data: any[]) => void
>"A" : "A"
}
}
class B extends A {
>B : B
>A : A
constructor() {
"ngInject";
>"ngInject" : "ngInject"
console.log("B")
>console.log("B") : void
>console.log : (...data: any[]) => void
>console : Console
>log : (...data: any[]) => void
>"B" : "B"
super();
>super() : void
>super : typeof A
}
}

View File

@ -0,0 +1,17 @@
// @target: es5
// https://github.com/microsoft/TypeScript/issues/48761
"use strict";
class A {
public constructor() {
console.log("A")
}
}
class B extends A {
constructor() {
"ngInject";
console.log("B")
super();
}
}