diff --git a/packages/babel-plugin-transform-classes/src/transformClass.ts b/packages/babel-plugin-transform-classes/src/transformClass.ts index 80046997485e..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 Set>(); + const bareSupers: NodePath[] = []; 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);