Class: Byebug::FinishCommand

Inherits:
Command
  • Object
show all
Defined in:
lib/byebug/commands/finish.rb

Overview

Implements the finish functionality.

Allows the user to continue execution until certain frames are finished.

Class Method Summary collapse

Instance Method Summary collapse

Methods inherited from Command

commands, find, format_subcmd, format_subcmds, help, inherited, #initialize, load_commands, #match

Constructor Details

This class inherits a constructor from Byebug::Command

Class Method Details

.descriptionObject



34
35
36
37
38
39
40
# File 'lib/byebug/commands/finish.rb', line 34

def description
  %(fin[ish][ n_frames]        Execute until frame returns.

    If no number is given, we run until the current frame returns. If a
    number of frames `n_frames` is given, then we run until `n_frames`
    return from the current position.)
end

.namesObject



30
31
32
# File 'lib/byebug/commands/finish.rb', line 30

def names
  %w(finish)
end

Instance Method Details

#executeObject



14
15
16
17
18
19
20
21
22
23
24
25
26
27
# File 'lib/byebug/commands/finish.rb', line 14

def execute
  max_frames = Context.stack_size - @state.frame_pos
  if @match[1]
    n_frames, err = get_int(@match[1], 'finish', 0, max_frames - 1)
    return errmsg(err) unless n_frames
  else
    n_frames = 1
  end

  force = n_frames == 0 ? true : false
  @state.context.step_out(@state.frame_pos + n_frames, force)
  @state.frame_pos = 0
  @state.proceed
end

#regexpObject



10
11
12
# File 'lib/byebug/commands/finish.rb', line 10

def regexp
  /^\s* fin(?:ish)? (?:\s+(\S+))? \s*$/x
end