Skip to content

Commit 693f2d2

Browse files
authored
Fix the transform of super.foo--/super[foo]-- (and prefix) (#14162)
1 parent dc5f419 commit 693f2d2

2 files changed

Lines changed: 106 additions & 5 deletions

File tree

packages/babel-traverse/src/path/conversion.ts

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -485,7 +485,12 @@ function standardizeSuperProperty(superProp) {
485485
computedKey ? identifier(computedKey.name) : superProp.node.property,
486486
superProp.node.computed,
487487
),
488-
binaryExpression("+", identifier(tmp.name), numericLiteral(1)),
488+
binaryExpression(
489+
// map `++` to `+`, and `--` to `-`
490+
superProp.parentPath.node.operator[0] as "+" | "-",
491+
identifier(tmp.name),
492+
numericLiteral(1),
493+
),
489494
),
490495
];
491496

packages/babel-traverse/test/arrow-transform.js

Lines changed: 100 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -518,7 +518,7 @@ describe("arrow function conversion", () => {
518518
);
519519
});
520520

521-
it("should convert super.prop prefix update", () => {
521+
it("should convert `++super.prop` prefix update", () => {
522522
assertConversion(
523523
`
524524
() => {
@@ -542,7 +542,31 @@ describe("arrow function conversion", () => {
542542
);
543543
});
544544

545-
it("should convert super[prop] prefix update", () => {
545+
it("should convert `--super.prop` prefix update", () => {
546+
assertConversion(
547+
`
548+
() => {
549+
--super.foo;
550+
};
551+
--super.foo;
552+
() => --super.foo;
553+
`,
554+
`
555+
var _superprop_getFoo = () => super.foo,
556+
_superprop_setFoo = _value => super.foo = _value;
557+
558+
(function () {
559+
var _tmp;
560+
561+
_tmp = _superprop_getFoo(), _superprop_setFoo(_tmp - 1);
562+
});
563+
--super.foo;
564+
() => --super.foo;
565+
`,
566+
);
567+
});
568+
569+
it("should convert `++super[prop]` prefix update", () => {
546570
assertConversion(
547571
`
548572
() => {
@@ -566,7 +590,31 @@ describe("arrow function conversion", () => {
566590
);
567591
});
568592

569-
it("should convert super.prop suffix update", () => {
593+
it("should convert `--super[prop]` prefix update", () => {
594+
assertConversion(
595+
`
596+
() => {
597+
--super[foo];
598+
};
599+
--super[foo];
600+
() => --super[foo];
601+
`,
602+
`
603+
var _superprop_get = _prop2 => super[_prop2],
604+
_superprop_set = (_prop3, _value) => super[_prop3] = _value;
605+
606+
(function () {
607+
var _tmp, _prop;
608+
609+
_tmp = _superprop_get(_prop = foo), _superprop_set(_prop, _tmp - 1);
610+
});
611+
--super[foo];
612+
() => --super[foo];
613+
`,
614+
);
615+
});
616+
617+
it("should convert `super.prop++` suffix update", () => {
570618
assertConversion(
571619
`
572620
() => {
@@ -590,7 +638,31 @@ describe("arrow function conversion", () => {
590638
);
591639
});
592640

593-
it("should convert super[prop] suffix update", () => {
641+
it("should convert `super.prop--` suffix update", () => {
642+
assertConversion(
643+
`
644+
() => {
645+
super.foo--;
646+
};
647+
super.foo--;
648+
() => super.foo--;
649+
`,
650+
`
651+
var _superprop_getFoo = () => super.foo,
652+
_superprop_setFoo = _value => super.foo = _value;
653+
654+
(function () {
655+
var _tmp;
656+
657+
_tmp = _superprop_getFoo(), _superprop_setFoo(_tmp - 1), _tmp;
658+
});
659+
super.foo--;
660+
() => super.foo--;
661+
`,
662+
);
663+
});
664+
665+
it("should convert `super[prop]++` suffix update", () => {
594666
assertConversion(
595667
`
596668
() => {
@@ -614,6 +686,30 @@ describe("arrow function conversion", () => {
614686
);
615687
});
616688

689+
it("should convert `super[prop]--` suffix update", () => {
690+
assertConversion(
691+
`
692+
() => {
693+
super[foo]--;
694+
};
695+
super[foo]--;
696+
() => super[foo]--;
697+
`,
698+
`
699+
var _superprop_get = _prop2 => super[_prop2],
700+
_superprop_set = (_prop3, _value) => super[_prop3] = _value;
701+
702+
(function () {
703+
var _tmp, _prop;
704+
705+
_tmp = _superprop_get(_prop = foo), _superprop_set(_prop, _tmp - 1), _tmp;
706+
});
707+
super[foo]--;
708+
() => super[foo]--;
709+
`,
710+
);
711+
});
712+
617713
it("should convert super.prop() calls without params", () => {
618714
assertConversion(
619715
`

0 commit comments

Comments
 (0)