diff --git a/src/compiler/transformers/esDecorators.ts b/src/compiler/transformers/esDecorators.ts index d0614bf9f907d..0a3579d1e34f3 100644 --- a/src/compiler/transformers/esDecorators.ts +++ b/src/compiler/transformers/esDecorators.ts @@ -1072,8 +1072,8 @@ export function transformESDecorators(context: TransformationContext): (x: Sourc if (initializerStatements) { const statements: Statement[] = []; const nonPrologueStart = factory.copyPrologue(node.body.statements, statements, /*ensureUseStrict*/ false, visitor); - addRange(statements, initializerStatements); addRange(statements, visitNodes(node.body.statements, visitor, isStatement, nonPrologueStart)); + addRange(statements, initializerStatements); body = factory.createBlock(statements, /*multiLine*/ true); setOriginalNode(body, node.body); setTextRange(body, node.body); diff --git a/tests/baselines/reference/esDecorators-classExpression-classSuper.7.js b/tests/baselines/reference/esDecorators-classExpression-classSuper.7.js new file mode 100644 index 0000000000000..1558ab60ab93a --- /dev/null +++ b/tests/baselines/reference/esDecorators-classExpression-classSuper.7.js @@ -0,0 +1,44 @@ +//// [esDecorators-classExpression-classSuper.7.ts] +class A {} +class B extends A { + public constructor() { + super(); + } + + @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() { + super(); + __runInitializers(this, _instanceExtraInitializers); + } + m() { } + }; +})(); +function foo(method, _context) { + return function () { + method.call(this); + }; +} +new B(); diff --git a/tests/cases/conformance/esDecorators/classExpression/classSuper/esDecorators-classExpression-classSuper.7.ts b/tests/cases/conformance/esDecorators/classExpression/classSuper/esDecorators-classExpression-classSuper.7.ts new file mode 100644 index 0000000000000..1a931f0edeca1 --- /dev/null +++ b/tests/cases/conformance/esDecorators/classExpression/classSuper/esDecorators-classExpression-classSuper.7.ts @@ -0,0 +1,21 @@ +// @target: es2022 +// @noEmitHelpers: true +// @noTypesAndSymbols: true + +class A {} +class B extends A { + public constructor() { + super(); + } + + @foo + public m(): void {} +} + +function foo(method: any, _context: any): any { + return function (this: any) { + method.call(this); + }; +} + +new B();