lib/byebug/commands/continue.rb
# frozen_string_literal: true
require_relative "../command"
require_relative "../helpers/parse"
module Byebug
#
# Implements the continue command.
#
# Allows the user to continue execution until the next stopping point, a
# specific line number or until program termination.
#
class ContinueCommand < Command
include Helpers::ParseHelper
def self.regexp
/^\s* c(?:ont(?:inue)?)? (?:(!|\s+unconditionally|\s+\S+))? \s*$/x
end
def self.description
<<-DESCRIPTION
c[ont[inue]][ <line_number>]
#{short_description}
Normally the program stops at the next breakpoint. However, if the
parameter "unconditionally" is given or the command is suffixed with
"!", the program will run until the end regardless of any enabled
breakpoints.
DESCRIPTION
end
def self.short_description
"Runs until program ends, hits a breakpoint or reaches a line"
end
def execute
if until_line?
num, err = get_int(modifier, "Continue", 0, nil)
return errmsg(err) unless num
filename = File.expand_path(frame.file)
return errmsg(pr("continue.errors.unstopped_line", line: num)) unless Breakpoint.potential_line?(filename, num)
Breakpoint.add(filename, num)
end
processor.proceed!
Byebug.mode = :off if unconditionally?
Byebug.stop if unconditionally? || Byebug.stoppable?
end
private
def until_line?
@match[1] && !["!", "unconditionally"].include?(modifier)
end
def unconditionally?
@match[1] && ["!", "unconditionally"].include?(modifier)
end
def modifier
@match[1].lstrip
end
end
end