if ( !defined( $saw_md5{$digest} ) ) {
$saw_md5{$digest} = $iter;
}
+
+ # do a second iteration if all ok and requested by formatter
+ # to allow delayed adding/deleting of commas (git156, git143)
+ elsif ( $iter == 1
+ && !$stop_now
+ && $formatter->can('want_second_iteration')
+ && $formatter->want_second_iteration() )
+ {
+ ## deja vu, but do not set $stop_now
+ }
else {
# Deja vu, stop iterating
+
$stop_now = 1;
my $iterm = $iter - 1;
if ( $saw_md5{$digest} != $iterm ) {
return;
} ## end sub setup_convergence_test
-sub not_converged {
- my $self = shift;
-
- # Block convergence of this iteration. This is currently needed
- # when adding/deleting commas is delayed by 1 iteration (see git #156)
- $self->[_K_arrival_order_matches_] = 0;
- return;
-} ## end sub not_converged
-
sub get_convergence_check {
my ($self) = @_;
my $rlist = $self->[_rK_checklist_];
_rbreak_before_Kfirst_ => $i++,
_rbreak_after_Klast_ => $i++,
_converged_ => $i++,
+ _want_second_iteration_ => $i++,
_rstarting_multiline_qw_seqno_by_K_ => $i++,
_rending_multiline_qw_seqno_by_K_ => $i++,
$self->[_rbreak_before_Kfirst_] = {};
$self->[_rbreak_after_Klast_] = {};
$self->[_converged_] = 0;
+ $self->[_want_second_iteration_] = 0;
# qw stuff
$self->[_rstarting_multiline_qw_seqno_by_K_] = {};
return $self->[_converged_];
}
+sub want_second_iteration {
+ my ($self) = @_;
+ return $self->[_want_second_iteration_];
+}
+
sub get_output_line_number {
my ($self) = @_;
my $vao = $self->[_vertical_aligner_object_];
my $max_iterations = $rOpts->{'iterations'};
if ( $it == 1 && $max_iterations > 1 ) {
- # if so, force another iteration
- my $file_writer_object = $self->[_file_writer_object_];
- $file_writer_object->not_converged();
+ # if so, set flag to request another iteration
+ $self->[_want_second_iteration_] = 1;
return 1;
}
return;
$file_writer_object->report_line_length_errors();
# Define the formatter self-check for convergence.
- $self->[_converged_] =
- $severe_error
- || $file_writer_object->get_convergence_check()
+ $self->[_converged_] = $severe_error
+ || (!$self->[_want_second_iteration_]
+ && $file_writer_object->get_convergence_check() )
|| $rOpts->{'indent-only'};
return;