@@ -6648,49 +6648,58 @@ Compressor.prototype.compress = function(node) {
66486648
66496649 function walk_cond(condition, consequent, alternative) {
66506650 var save = segment;
6651- var segments = scan_branches(condition, consequent, alternative);
6651+ var segments = scan_branches(1, condition, consequent, alternative);
66526652 if (consequent) {
6653- segment = segments[0] ;
6654- pop();
6653+ segment = segments.consequent.segment ;
6654+ for (var i = segments.consequent.level; --i >= 0;) pop();
66556655 if (segment !== save) return;
66566656 }
66576657 if (alternative) {
6658- segment = segments[1] ;
6659- pop();
6658+ segment = segments.alternative.segment ;
6659+ for (var i = segments.alternative.level; --i >= 0;) pop();
66606660 if (segment !== save) return;
66616661 }
66626662 segment = save;
66636663 }
66646664
6665- function scan_branches(condition, consequent, alternative) {
6666- var segments = [ segment, segment ];
6665+ function scan_branches(level, condition, consequent, alternative) {
6666+ var segments = {
6667+ consequent: {
6668+ segment: segment,
6669+ level: level,
6670+ },
6671+ alternative: {
6672+ segment: segment,
6673+ level: level,
6674+ },
6675+ }
66676676 if (condition instanceof AST_Binary) switch (condition.operator) {
66686677 case "&&":
6669- segments[0] = scan_branches(condition.left, condition.right)[0] ;
6678+ segments.consequent = scan_branches(level + 1, condition.left, condition.right).consequent ;
66706679 break;
66716680 case "||":
66726681 case "??":
6673- segments[1] = scan_branches(condition.left, null, condition.right)[1] ;
6682+ segments.alternative = scan_branches(level + 1, condition.left, null, condition.right).alternative ;
66746683 break;
66756684 default:
66766685 condition.walk(tw);
66776686 break;
66786687 } else if (condition instanceof AST_Conditional) {
6679- scan_branches(condition.condition, condition.consequent, condition.alternative);
6688+ scan_branches(level + 1, condition.condition, condition.consequent, condition.alternative);
66806689 } else {
66816690 condition.walk(tw);
66826691 }
66836692 if (consequent) {
6684- segment = segments[0] ;
6693+ segment = segments.consequent.segment ;
66856694 push();
66866695 consequent.walk(tw);
6687- segments[0] = segment;
6696+ segments.consequent.segment = segment;
66886697 }
66896698 if (alternative) {
6690- segment = segments[1] ;
6699+ segment = segments.alternative.segment ;
66916700 push();
66926701 alternative.walk(tw);
6693- segments[1] = segment;
6702+ segments.alternative.segment = segment;
66946703 }
66956704 return segments;
66966705 }
0 commit comments