diff options
author | Shlomi Fish <shlomif@iglu.org.il> | 2011-12-07 19:36:39 +0200 |
---|---|---|
committer | Tony Cook <tony@develop-help.com> | 2011-12-09 23:45:02 +1100 |
commit | 5d5d9ea3ae69424edca11bf2237f2504fa313408 (patch) | |
tree | cc53d8bb4eb87b3686b7eba2105a4e5467ae8636 /lib/perl5db.pl | |
parent | 7e7629faf067b99cf5b2d8e61fef8c0a0a4f47f7 (diff) | |
download | perl-5d5d9ea3ae69424edca11bf2237f2504fa313408.tar.gz |
Made "c [line_num]" working again.
This is a bug-fix to
https://rt.perl.org/rt3//Public/Bug/Display.html?id=104820 .
Both the fix and a regression tests were added.
Diffstat (limited to 'lib/perl5db.pl')
-rw-r--r-- | lib/perl5db.pl | 31 |
1 files changed, 29 insertions, 2 deletions
diff --git a/lib/perl5db.pl b/lib/perl5db.pl index 84a38f17b8..f62f2abe4a 100644 --- a/lib/perl5db.pl +++ b/lib/perl5db.pl @@ -1956,7 +1956,10 @@ sub DB { elsif ($stop) { $evalarg = "\$DB::signal |= 1 if do {$stop}"; &eval; - $dbline{$line} =~ s/;9($|\0)/$1/; + # If the breakpoint is temporary, then delete its enabled status. + if ($dbline{$line} =~ s/;9($|\0)/$1/) { + _cancel_breakpoint_temp_enabled_status($filename, $line); + } } } ## end if ($dbline{$line} && ... @@ -2812,6 +2815,7 @@ in this and all call levels above this one. # Yes. Set up the one-time-break sigil. $dbline{$i} =~ s/($|\0)/;9$1/; # add one-time-only b.p. + _enable_breakpoint_temp_enabled_status($filename, $i); } ## end if ($i) # Turn off stack tracing from here up. @@ -4002,10 +4006,33 @@ sub _set_breakpoint_enabled_status { return; } +sub _enable_breakpoint_temp_enabled_status { + my ($filename, $line) = @_; + + _get_breakpoint_data_ref($filename, $line)->{'temp_enabled'} = 1; + + return; +} + +sub _cancel_breakpoint_temp_enabled_status { + my ($filename, $line) = @_; + + my $ref = _get_breakpoint_data_ref($filename, $line); + + delete ($ref->{'temp_enabled'}); + + if (! %$ref) { + _delete_breakpoint_data_ref($filename, $line); + } + + return; +} + sub _is_breakpoint_enabled { my ($filename, $line) = @_; - return _get_breakpoint_data_ref($filename, $line)->{'enabled'}; + my $data_ref = _get_breakpoint_data_ref($filename, $line); + return ($data_ref->{'enabled'} || $data_ref->{'temp_enabled'}); } =head2 C<cmd_wrapper()> (API) |