Skip to content

Commit

Permalink
fix(53204): call __runInitializers after super() call
Browse files Browse the repository at this point in the history
  • Loading branch information
a-tarasyuk committed Mar 15, 2023
1 parent 9ccf47f commit 71f24f3
Show file tree
Hide file tree
Showing 3 changed files with 66 additions and 1 deletion.
2 changes: 1 addition & 1 deletion src/compiler/transformers/esDecorators.ts
Expand Up @@ -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);
Expand Down
@@ -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();
@@ -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();

0 comments on commit 71f24f3

Please sign in to comment.