diff options
author | Shlomi Fish <shlomif@shlomifish.org> | 2012-11-18 13:33:27 +0200 |
---|---|---|
committer | Tony Cook <tony@develop-help.com> | 2013-01-02 11:22:06 +1100 |
commit | 7ba7809260d5d5f2e6a8a5e7b8f64609c4f7ff4d (patch) | |
tree | a817f64bd7ce95d4b2e898522bb41df82055e1e9 /lib/perl5db.pl | |
parent | b747a9b0bf3c21193c812b1e8bf81786837cc6bf (diff) | |
download | perl-7ba7809260d5d5f2e6a8a5e7b8f64609c4f7ff4d.tar.gz |
Start refactoring "sub restart".
Diffstat (limited to 'lib/perl5db.pl')
-rw-r--r-- | lib/perl5db.pl | 44 |
1 files changed, 24 insertions, 20 deletions
diff --git a/lib/perl5db.pl b/lib/perl5db.pl index 7bf7177d62..7802f2baa9 100644 --- a/lib/perl5db.pl +++ b/lib/perl5db.pl @@ -9833,46 +9833,50 @@ variable via C<DB::set_list>. # The breakpoint was inside an eval. This is a little # more difficult. XXX and I don't understand it. - for (@hard) { + foreach my $hard_file (@hard) { # Get over to the eval in question. - *dbline = $main::{ '_<' . $_ }; - my ( $quoted, $sub, %subs, $line ) = quotemeta $_; - for $sub ( keys %sub ) { - next unless $sub{$sub} =~ /^$quoted:(\d+)-(\d+)$/; - $subs{$sub} = [ $1, $2 ]; + *dbline = $main::{ '_<' . $hard_file }; + my $quoted = quotemeta $hard_file; + my %subs; + for my $sub ( keys %sub ) { + if (my ($n1, $n2) = $sub{$sub} =~ /\A$quoted:(\d+)-(\d+)\z/) { + $subs{$sub} = [ $n1, $n2 ]; + } } unless (%subs) { - print $OUT - "No subroutines in $_, ignoring breakpoints.\n"; + print {$OUT} + "No subroutines in $hard_file, ignoring breakpoints.\n"; next; } - LINES: for $line ( keys %dbline ) { + LINES: foreach my $line ( keys %dbline ) { # One breakpoint per sub only: - my ( $offset, $sub, $found ); - SUBS: for $sub ( keys %subs ) { + my ( $offset, $found ); + SUBS: foreach my $sub ( keys %subs ) { if ( - $subs{$sub}->[1] >= - $line # Not after the subroutine + $subs{$sub}->[1] >= $line # Not after the subroutine and ( not defined $offset # Not caught - or $offset < 0 + or $offset < 0 ) - ) + ) { # or badly caught $found = $sub; $offset = $line - $subs{$sub}->[0]; - $offset = "+$offset", last SUBS - if $offset >= 0; + if ($offset >= 0) { + $offset = "+$offset"; + last SUBS; + } } ## end if ($subs{$sub}->[1] >=... } ## end for $sub (keys %subs) if ( defined $offset ) { $postponed{$found} = - "break $offset if $dbline{$line}"; + "break $offset if $dbline{$line}"; } else { - print $OUT -"Breakpoint in $_:$line ignored: after all the subroutines.\n"; + print {$OUT} + ("Breakpoint in ${hard_file}:$line ignored:" + . " after all the subroutines.\n"); } } ## end for $line (keys %dbline) } ## end for (@hard) |