package Devel::ebug::Backend::Plugin::Run;
use strict;
use warnings;
sub register_commands {
return (
next => { sub => \&next, record => 1 },
return => { sub => \&return, record => 1 },
run => { sub => \&run, record => 1 },
return => { sub => \&return, record => 1 },
step => { sub => \&step, record => 1 },
);
}
sub next {
my($req, $context) = @_;
$context->{mode} = "next"; # single step (but over subroutines)
$context->{last} = 1; # and out of the loop
return {};
}
sub return {
my($req, $context) = @_;
if ($req->{values}) {
$context->{stack}->[0]->{return} = $req->{values};
}
$context->{mode} = "return"; # run until returned from subroutine
$DB::single = 0; # run
if ($context->{stack}->[-1]) {
$context->{stack}->[-1]->{single} = 1; # single step higher up
}
$context->{last} = 1; # and out of the loop
return {};
}
sub run {
my($req, $context) = @_;
$context->{mode} = "run"; # run until break point
if (@{$context->{watch_points}}) {
# watch points, let's go slow
$context->{watch_single} = 0;
} else {
# no watch points? let's go fast!
$DB::single = 0; # run until next break point
}
$context->{last} = 1; # and out of the loop
return {};
}
sub step {
my($req, $context) = @_;
$DB::single = 1; # single step
$context->{mode} = "step"; # single step (into subroutines)
$context->{last} = 1; # and out of the loop, onto the next command
return {};
}
1;
syntax highlighted by Code2HTML, v. 0.9.1