From: Steve Hancock Date: Fri, 17 Feb 2023 05:39:33 +0000 (-0800) Subject: fix issue c190 X-Git-Tag: 20230309~20 X-Git-Url: https://git.donarmstrong.com/?a=commitdiff_plain;h=56d67cd2145dedf124448a4c7b9e18a70706178a;p=perltidy.git fix issue c190 --- diff --git a/dev-bin/run_convergence_tests.pl.data b/dev-bin/run_convergence_tests.pl.data index 5e8f36a5..df817837 100644 --- a/dev-bin/run_convergence_tests.pl.data +++ b/dev-bin/run_convergence_tests.pl.data @@ -18070,3 +18070,24 @@ s/^([^\t]*)(\t+)/$1.(" " x ((length($2)<<3)-(length($1)&7)))/e ) ==> c100.par <== # default settings + +==> c190.in <== + # reverse sweep needs to look at '$saw_level_change' for these cases + local($codeA) = "sub wrap_cmd_$cmd {" . "\n" + .'local($cmd, $_) = @_; local ($args, $dummy, $pat) = "";' + . $bodyA + . (($thisone)? "\nprint \"\\nwrap $cmd:\".\$args.\"\\n\";" : '') + . "\n".'(&make_deferred_wrapper(1).$cmd.' + . "\"$padding\"".'.$args.&make_deferred_wrapper(0),$_)}' + . "\n"; + + local($codeA) = "sub wrap_cmd_$cmd {" . "\n" + .'local($cmd, $_) = @_; local ($args, $dummy, $pat) = "";' + . $bodyA + . (($thisone)? "\nprint \"\\nwrap $cmd:\".\$args.\"\\n\";" : '') + . "\n".'(&make_deferred_wrapper(1).$cmd.' + . "\"$padding\"".'.$args.&make_deferred_wrapper(0),$_)}' + . "\n"; + +==> c190.par <== +-pbp -nst -nse -wn -xci -conv -fso -gcs -maxue=3 diff --git a/dev-bin/run_convergence_tests.pl.expect b/dev-bin/run_convergence_tests.pl.expect index 3e5d70c7..04c5abc3 100644 --- a/dev-bin/run_convergence_tests.pl.expect +++ b/dev-bin/run_convergence_tests.pl.expect @@ -11167,3 +11167,31 @@ s/^([^\t]*)(\t+)/$1.(" " x ((length($2)<<3)-(length($1)&7)))/e ) # Stable (note ';' before '#' ) eval { substr( $$textref, $_[4], $_[1] + $_[5] ) = $extra; }; # need to check for sort_map_grep_eval in starting_one_line_block + +==> c190 <== + # reverse sweep needs to look at '$saw_level_change' for these cases + local ($codeA) + = "sub wrap_cmd_$cmd {" . "\n" + . 'local($cmd, $_) = @_; local ($args, $dummy, $pat) = "";' + . $bodyA + . ( ($thisone) + ? "\nprint \"\\nwrap $cmd:\".\$args.\"\\n\";" + : '' + ) + . "\n" + . '(&make_deferred_wrapper(1).$cmd.' + . "\"$padding\"" + . '.$args.&make_deferred_wrapper(0),$_)}' . "\n"; + + local ($codeA) + = "sub wrap_cmd_$cmd {" . "\n" + . 'local($cmd, $_) = @_; local ($args, $dummy, $pat) = "";' + . $bodyA + . ( ($thisone) + ? "\nprint \"\\nwrap $cmd:\".\$args.\"\\n\";" + : '' + ) + . "\n" + . '(&make_deferred_wrapper(1).$cmd.' + . "\"$padding\"" + . '.$args.&make_deferred_wrapper(0),$_)}' . "\n"; diff --git a/lib/Perl/Tidy/Formatter.pm b/lib/Perl/Tidy/Formatter.pm index 428ea1d5..980162b2 100644 --- a/lib/Perl/Tidy/Formatter.pm +++ b/lib/Perl/Tidy/Formatter.pm @@ -18426,6 +18426,7 @@ EOM # loop over all line pairs #------------------------- my $incomplete_loop; + my $saw_level_diff = 0; for my $iter ( $nstart .. $nstop ) { my $n = $iter; @@ -18473,6 +18474,9 @@ EOM my $type_ibeg_1 = $types_to_go[$ibeg_1]; my $type_ibeg_2 = $types_to_go[$ibeg_2]; + $saw_level_diff ||= + $levels_to_go[$ibeg_1] != $levels_to_go[$ibeg_2]; + # terminal token of line 2 if any side comment is ignored: my $iend_2t = $iend_2; my $type_iend_2t = $type_iend_2; @@ -18658,7 +18662,7 @@ EOM if ( $dbs > 0 ) { # We will accept this joint but turn off - # optimization; it can restart again if possible. + # optimization; it will restart again if possible. $optimization_on = 0; $reverse = 0; } @@ -18750,7 +18754,11 @@ EOM # Look for pattern 2: # - we are joining at the last possible joint, and # - the strength values increase montonically with $n - elsif ( $n_best == $nbs_max && $dbs_min > 0 ) { + # - we did not see a level change (test case c190) + elsif ($n_best == $nbs_max + && $dbs_min > 0 + && !$saw_level_diff ) + { if (OPTIMIZED_REVERSE_SEARCH) { DEBUG_RECOMBINE > 1 && print STDERR