mirror of
https://github.com/microsoft/TypeScript.git
synced 2026-02-06 11:54:44 -06:00
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:
parent
c242d4a46b
commit
79b02a6726
@ -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
|
||||
]
|
||||
),
|
||||
|
||||
@ -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));
|
||||
@ -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))
|
||||
}
|
||||
}
|
||||
|
||||
@ -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
|
||||
}
|
||||
}
|
||||
|
||||
17
tests/cases/compiler/constructorWithSuperAndPrologue.es5.ts
Normal file
17
tests/cases/compiler/constructorWithSuperAndPrologue.es5.ts
Normal 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();
|
||||
}
|
||||
}
|
||||
Loading…
x
Reference in New Issue
Block a user