From f34529d5c3c7c0a4bce8d5888158d23c67dbc4eb Mon Sep 17 00:00:00 2001 From: Daniele Bacarella Date: Thu, 30 Jun 2022 22:40:50 +0200 Subject: [PATCH 1/2] Fixed bug when using multiple super calls (#14652) --- .../src/transformClass.ts | 6 +++--- .../test/fixtures/regression/14652/input.js | 5 +++++ .../test/fixtures/regression/14652/output.js | 16 ++++++++++++++++ 3 files changed, 24 insertions(+), 3 deletions(-) create mode 100644 packages/babel-plugin-transform-classes/test/fixtures/regression/14652/input.js create mode 100644 packages/babel-plugin-transform-classes/test/fixtures/regression/14652/output.js diff --git a/packages/babel-plugin-transform-classes/src/transformClass.ts b/packages/babel-plugin-transform-classes/src/transformClass.ts index 80046997485e..d76c192d82d5 100644 --- a/packages/babel-plugin-transform-classes/src/transformClass.ts +++ b/packages/babel-plugin-transform-classes/src/transformClass.ts @@ -399,7 +399,7 @@ export default function transformClass( ); } - const bareSupers = new Set>(); + const bareSupers = new Array>(); path.traverse( traverse.visitors.merge([ environmentVisitor, @@ -407,14 +407,14 @@ export default function transformClass( Super(path) { const { node, parentPath } = path; if (parentPath.isCallExpression({ callee: node })) { - bareSupers.add(parentPath); + bareSupers.unshift(parentPath); } }, } as Visitor, ]), ); - let guaranteedSuperBeforeFinish = !!bareSupers.size; + let guaranteedSuperBeforeFinish = !!bareSupers.length; for (const bareSuper of bareSupers) { wrapSuperCall(bareSuper, classState.superName, thisRef, body); diff --git a/packages/babel-plugin-transform-classes/test/fixtures/regression/14652/input.js b/packages/babel-plugin-transform-classes/test/fixtures/regression/14652/input.js new file mode 100644 index 000000000000..ebd318d6921b --- /dev/null +++ b/packages/babel-plugin-transform-classes/test/fixtures/regression/14652/input.js @@ -0,0 +1,5 @@ +class C extends P { + constructor() { + super(super(super())) + } +} diff --git a/packages/babel-plugin-transform-classes/test/fixtures/regression/14652/output.js b/packages/babel-plugin-transform-classes/test/fixtures/regression/14652/output.js new file mode 100644 index 000000000000..bfe27b577f77 --- /dev/null +++ b/packages/babel-plugin-transform-classes/test/fixtures/regression/14652/output.js @@ -0,0 +1,16 @@ +var C = /*#__PURE__*/function (_P) { + "use strict"; + + babelHelpers.inherits(C, _P); + + var _super = babelHelpers.createSuper(C); + + function C() { + var _this; + + babelHelpers.classCallCheck(this, C); + return _super.call(this, _this = _super.call(this, _this = _super.call(this))); + } + + return babelHelpers.createClass(C); +}(P); From ed0b5c9314293398255912b57d8e2a9ebddb1b6f Mon Sep 17 00:00:00 2001 From: Daniele Bacarella Date: Fri, 1 Jul 2022 12:01:57 +0200 Subject: [PATCH 2/2] changed array syntax for bareSupers in transformClass.ts --- packages/babel-plugin-transform-classes/src/transformClass.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/babel-plugin-transform-classes/src/transformClass.ts b/packages/babel-plugin-transform-classes/src/transformClass.ts index d76c192d82d5..6d3b3e63a0e7 100644 --- a/packages/babel-plugin-transform-classes/src/transformClass.ts +++ b/packages/babel-plugin-transform-classes/src/transformClass.ts @@ -399,7 +399,7 @@ export default function transformClass( ); } - const bareSupers = new Array>(); + const bareSupers: NodePath[] = []; path.traverse( traverse.visitors.merge([ environmentVisitor,