class Byebug::CommandProcessor
Processes commands in regular mode
Attributes
display[R]
state[R]
Public Class Methods
new(interface = LocalInterface.new)
click to toggle source
Calls superclass method
Byebug::Processor.new
# File lib/byebug/processors/command_processor.rb, line 10 def initialize(interface = LocalInterface.new) super(interface) @display = [] @last_cmd = nil # To allow empty (just <RET>) commands @context_was_dead = false # Assume we haven't started. end
Public Instance Methods
at_breakpoint(_context, breakpoint)
click to toggle source
# File lib/byebug/processors/command_processor.rb, line 25 def at_breakpoint(_context, breakpoint) n = Byebug.breakpoints.index(breakpoint) + 1 file = normalize(breakpoint.source) line = breakpoint.pos puts "Stopped by breakpoint #{n} at #{file}:#{line}" end
at_catchpoint(context, excpt)
click to toggle source
# File lib/byebug/processors/command_processor.rb, line 33 def at_catchpoint(context, excpt) file = normalize(context.frame_file(0)) line = context.frame_line(0) puts "Catchpoint at #{file}:#{line}: `#{excpt}' (#{excpt.class})" end
at_line(context, file, line)
click to toggle source
# File lib/byebug/processors/command_processor.rb, line 46 def at_line(context, file, line) process_commands(context, file, line) end
at_return(context, file, line)
click to toggle source
# File lib/byebug/processors/command_processor.rb, line 50 def at_return(context, file, line) process_commands(context, file, line) end
at_tracing(context, file, line)
click to toggle source
# File lib/byebug/processors/command_processor.rb, line 40 def at_tracing(context, file, line) puts "Tracing: #{normalize(file)}:#{line} #{get_line(file, line)}" always_run(context, file, line, 2) end
interface=(interface)
click to toggle source
# File lib/byebug/processors/command_processor.rb, line 18 def interface=(interface) @interface.close if @interface @interface = interface end
Private Instance Methods
always_run(context, file, line, run_level)
click to toggle source
Run commands everytime.
For example display commands or possibly the list or irb in an “autolist” or “autoirb”.
@return List of commands acceptable to run bound to the current state
# File lib/byebug/processors/command_processor.rb, line 71 def always_run(context, file, line, run_level) @state = RegularState.new(context, @display, file, @interface, line) # Change default when in irb or code included in command line Setting[:autolist] = false if ['(irb)', '-e'].include?(file) # Bind commands to the current state. Command.commands.each do |cmd| cmd.new(state).execute if cmd.always_run >= run_level end end
match_cmd(input)
click to toggle source
Finds a matches the command matching the input
# File lib/byebug/processors/command_processor.rb, line 147 def match_cmd(input) Command.commands.each do |c| cmd = c.new(state) return cmd if cmd.match(input) end nil end
one_cmd(context, input)
click to toggle source
Executes a single byebug command
# File lib/byebug/processors/command_processor.rb, line 132 def one_cmd(context, input) cmd = match_cmd(input) return one_unknown_cmd(input) unless cmd if context.dead? && !cmd.class.allow_in_post_mortem return errmsg('Command unavailable in post mortem mode.') end cmd.execute end
one_unknown_cmd(input)
click to toggle source
Autoevals a single command
# File lib/byebug/processors/command_processor.rb, line 118 def one_unknown_cmd(input) unless Setting[:autoeval] return errmsg("Unknown command: \"#{input}\". Try \"help\"") end eval_cmd = EvalCommand.new(state) eval_cmd.match(input) eval_cmd.execute end
process_commands(context, file, line)
click to toggle source
Handle byebug commands.
# File lib/byebug/processors/command_processor.rb, line 86 def process_commands(context, file, line) always_run(context, file, line, 1) puts 'The program finished.' if program_just_finished?(context) puts(state.location) if Setting[:autolist] == 0 @interface.autorestore repl(context) ensure @interface.autosave end
program_just_finished?(context)
click to toggle source
Returns true first time control is given to the user after program termination.
# File lib/byebug/processors/command_processor.rb, line 160 def program_just_finished?(context) result = context.dead? && !@context_was_dead @context_was_dead = false if result == true result end
prompt(context)
click to toggle source
Prompt shown before reading a command.
# File lib/byebug/processors/command_processor.rb, line 59 def prompt(context) "(byebug#{context.dead? ? ':post-mortem' : ''}) " end
repl(context)
click to toggle source
Main byebug's REPL
# File lib/byebug/processors/command_processor.rb, line 102 def repl(context) until state.proceed? cmd = @interface.read_command(prompt(context)) return unless cmd next if cmd == '' && @last_cmd.nil? cmd.empty? ? cmd = @last_cmd : @last_cmd = cmd one_cmd(context, cmd) end end