class Byebug::IRBCommand

Implements byebug’s “irb” command.

def description

def description
  %{
    irb[ -d]\tstarts an Interactive Ruby (IRB) session.
    If -d is added you can get access to byebug's state via the global
    variable $byebug_state. IRB is extended with methods "cont", "n" and
    "step" which run the corresponding byebug commands. In contrast to the
    real byebug commands these commands don't allow arguments.
  }
end

def execute

def execute
  unless @state.interface.kind_of?(LocalInterface)
    print "Command is available only in local mode.\n"
    throw :debug_error
  end
  add_debugging = @match.is_a?(MatchData) && '-d' == @match[1]
  $byebug_state = @state if add_debugging
  cont = IRB.start_session(get_binding)
  case cont
  when :cont
    @state.proceed
  when :step
    force = Command.settings[:force_stepping]
    @state.context.step_into 1, force
    @state.proceed
  when :next
    force = Command.settings[:force_stepping]
    @state.context.step_over 1, @state.frame_pos, force
    @state.proceed
  else
    file = @state.context.frame_file(0)
    line = @state.context.frame_line(0)
    CommandProcessor.print_location_and_text(file, line)
    @state.previous_line = nil
  end
  $byebug_state = nil if add_debugging
end

def names

def names
  %w(irb)
end

def regexp

def regexp
  /^\s* irb
    (?:\s+(-d))?
    \s*$/x
end