mirror of
https://github.com/microsoft/TypeScript.git
synced 2026-06-17 00:34:47 -05:00
Co-authored-by: Oleksandr T <oleksandr.tarasiuk@outlook.com>
This commit is contained in:
@@ -36,6 +36,7 @@ import {
|
||||
Expression,
|
||||
ExpressionStatement,
|
||||
findComputedPropertyNameCacheAssignment,
|
||||
findSuperStatementIndex,
|
||||
firstOrUndefined,
|
||||
forEachEntry,
|
||||
ForStatement,
|
||||
@@ -1072,8 +1073,11 @@ export function transformESDecorators(context: TransformationContext): (x: Sourc
|
||||
if (initializerStatements) {
|
||||
const statements: Statement[] = [];
|
||||
const nonPrologueStart = factory.copyPrologue(node.body.statements, statements, /*ensureUseStrict*/ false, visitor);
|
||||
const superStatementIndex = findSuperStatementIndex(node.body.statements, nonPrologueStart);
|
||||
const indexOfFirstStatementAfterSuper = superStatementIndex >= 0 ? superStatementIndex + 1 : undefined;
|
||||
addRange(statements, visitNodes(node.body.statements, visitor, isStatement, nonPrologueStart, indexOfFirstStatementAfterSuper ? indexOfFirstStatementAfterSuper - nonPrologueStart : undefined));
|
||||
addRange(statements, initializerStatements);
|
||||
addRange(statements, visitNodes(node.body.statements, visitor, isStatement, nonPrologueStart));
|
||||
addRange(statements, visitNodes(node.body.statements, visitor, isStatement, indexOfFirstStatementAfterSuper));
|
||||
body = factory.createBlock(statements, /*multiLine*/ true);
|
||||
setOriginalNode(body, node.body);
|
||||
setTextRange(body, node.body);
|
||||
|
||||
@@ -0,0 +1,50 @@
|
||||
//// [esDecorators-classExpression-classSuper.7.ts]
|
||||
class A {}
|
||||
class B extends A {
|
||||
public constructor() {
|
||||
'inject';
|
||||
super();
|
||||
const a = 1;
|
||||
const b = 1;
|
||||
}
|
||||
|
||||
@foo
|
||||
public m(): void {}
|
||||
}
|
||||
|
||||
function foo(method: any, _context: any): any {
|
||||
return function (this: any) {
|
||||
method.call(this);
|
||||
};
|
||||
}
|
||||
|
||||
new B();
|
||||
|
||||
|
||||
//// [esDecorators-classExpression-classSuper.7.js]
|
||||
class A {
|
||||
}
|
||||
let B = (() => {
|
||||
let _instanceExtraInitializers = [];
|
||||
let _m_decorators;
|
||||
return class B extends A {
|
||||
static {
|
||||
_m_decorators = [foo];
|
||||
__esDecorate(this, null, _m_decorators, { kind: "method", name: "m", static: false, private: false, access: { has: obj => "m" in obj, get: obj => obj.m } }, null, _instanceExtraInitializers);
|
||||
}
|
||||
constructor() {
|
||||
'inject';
|
||||
super();
|
||||
__runInitializers(this, _instanceExtraInitializers);
|
||||
const a = 1;
|
||||
const b = 1;
|
||||
}
|
||||
m() { }
|
||||
};
|
||||
})();
|
||||
function foo(method, _context) {
|
||||
return function () {
|
||||
method.call(this);
|
||||
};
|
||||
}
|
||||
new B();
|
||||
@@ -0,0 +1,24 @@
|
||||
// @target: es2022
|
||||
// @noEmitHelpers: true
|
||||
// @noTypesAndSymbols: true
|
||||
|
||||
class A {}
|
||||
class B extends A {
|
||||
public constructor() {
|
||||
'inject';
|
||||
super();
|
||||
const a = 1;
|
||||
const b = 1;
|
||||
}
|
||||
|
||||
@foo
|
||||
public m(): void {}
|
||||
}
|
||||
|
||||
function foo(method: any, _context: any): any {
|
||||
return function (this: any) {
|
||||
method.call(this);
|
||||
};
|
||||
}
|
||||
|
||||
new B();
|
||||
Reference in New Issue
Block a user