]> git.donarmstrong.com Git - perltidy.git/commitdiff
fix issue c190
authorSteve Hancock <perltidy@users.sourceforge.net>
Fri, 17 Feb 2023 05:39:33 +0000 (21:39 -0800)
committerSteve Hancock <perltidy@users.sourceforge.net>
Fri, 17 Feb 2023 05:39:33 +0000 (21:39 -0800)
dev-bin/run_convergence_tests.pl.data
dev-bin/run_convergence_tests.pl.expect
lib/Perl/Tidy/Formatter.pm

index 5e8f36a59e7d7728afb9795faf8057702fa430d8..df817837d1ee926dd1f1318fa04f9f5b4c41d2bf 100644 (file)
@@ -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
index 3e5d70c71afd10c6cfa02ceb07fc308133d9b29d..04c5abc30b702105bc3acdc076b66caeb8038753 100644 (file)
@@ -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";
index 428ea1d5b5435ef83596e4a5ed6e7602fa909ded..980162b22d8dcd2e0bd78fc7b97d0d035e8b9c08 100644 (file)
@@ -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