summaryrefslogtreecommitdiff
path: root/lib/perl5db.pl
diff options
context:
space:
mode:
authorShlomi Fish <shlomif@iglu.org.il>2011-12-07 19:36:39 +0200
committerTony Cook <tony@develop-help.com>2011-12-09 23:45:02 +1100
commit5d5d9ea3ae69424edca11bf2237f2504fa313408 (patch)
treecc53d8bb4eb87b3686b7eba2105a4e5467ae8636 /lib/perl5db.pl
parent7e7629faf067b99cf5b2d8e61fef8c0a0a4f47f7 (diff)
downloadperl-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.pl31
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)