@@ -4034,12 +4034,23 @@ sub pp_cond_expr {
40344034 my $true = $cond -> sibling;
40354035 my $false = $true -> sibling;
40364036 my $cuddle = $self -> {' cuddle' };
4037-
4038- if (class($false ) eq " NULL" ) { # Empty else {} block was optimised away
4039- unless ($cx < 1 and (is_scope($true ) and $true -> name ne " null" )) {
4040- $cond = $self -> deparse($cond , 8);
4041- $true = $self -> deparse($true , 6);
4042- return $self -> maybe_parens(" $cond ? $true : ()" , $cx , 8);
4037+ my $no_true = 0;
4038+
4039+ if (class($false ) eq " NULL" ) { # Empty true or false block was optimised away
4040+ if (!($op -> flags & OPf_SPECIAL)) { # It was an empty true block
4041+ my $temp = $false ; $false = $true ; $true = $temp ;
4042+ $no_true = 1;
4043+ unless ($cx < 1 and (is_scope($false ) and $false -> name ne " null" )) {
4044+ $cond = $self -> deparse($cond , 8);
4045+ $false = $self -> deparse($false , 6);
4046+ return $self -> maybe_parens(" $cond ? () : $false " , $cx , 8);
4047+ }
4048+ } else { # Must have been an empty false block
4049+ unless ($cx < 1 and (is_scope($true ) and $true -> name ne " null" )) {
4050+ $cond = $self -> deparse($cond , 8);
4051+ $true = $self -> deparse($true , 6);
4052+ return $self -> maybe_parens(" $cond ? $true : ()" , $cx , 8);
4053+ }
40434054 }
40444055 } else { # Both true and false branches are present
40454056 unless ($cx < 1 and (is_scope($true ) and $true -> name ne " null" )
@@ -4053,8 +4064,10 @@ sub pp_cond_expr {
40534064 }
40544065
40554066 $cond = $self -> deparse($cond , 1);
4056- $true = $self -> deparse($true , 0);
4057- my $head = $self -> keyword(" if" ) . " ($cond ) {\n\t $true \n\b }" ;
4067+ $true = ($no_true ) ? " \b " : $self -> deparse($true , 0);
4068+ my $head = ($no_true )
4069+ ? $self -> keyword(" if" ) . " ($cond ) {\n\t ();\n\b }"
4070+ : $self -> keyword(" if" ) . " ($cond ) {\n\t $true \n\b }" ;
40584071 my @elsifs ;
40594072 my $elsif ;
40604073 while (!null($false ) and is_ifelse_cont($false )) {
@@ -4069,13 +4082,24 @@ sub pp_cond_expr {
40694082 $newcond = $newcond -> first-> sibling;
40704083 }
40714084 $newcond = $self -> deparse($newcond , 1);
4072- $newtrue = $self -> deparse($newtrue , 0);
4085+
4086+ if (null($false ) && ! ($newop -> flags & OPf_SPECIAL)) {
4087+ # An empty elsif "true" block has been optimised away
4088+ my $temp = $false ; $false = $newtrue ; $newtrue = $temp ;
4089+ $newtrue = " ();" ;
4090+ } else {
4091+ $newtrue = $self -> deparse($newtrue , 0);
4092+ }
4093+
40734094 $elsif ||= $self -> keyword(" elsif" );
40744095 push @elsifs , " $elsif ($newcond ) {\n\t $newtrue \n\b }" ;
40754096 }
40764097 if (!null($false )) {
40774098 $false = $cuddle . $self -> keyword(" else" ) . " {\n\t " .
40784099 $self -> deparse($false , 0) . " \n\b }\cK " ;
4100+ } elsif ($op -> flags & OPf_SPECIAL) {
4101+ $false = $cuddle . $self -> keyword(" else" ) . " {\n\t " .
4102+ " ();\n\b }\cK " ;
40794103 } else {
40804104 $false = " \cK " ;
40814105 }
0 commit comments