class DEBUGGER__::LineBreakpoint
def try_activate root_iseq = nil
def try_activate root_iseq = nil nearest = nil # NearestISeq iterate_iseq root_iseq do |iseq| iseq.traceable_lines_norec(line_events = {}) lines = line_events.keys.sort if !lines.empty? && lines.last >= line nline = lines.bsearch{|l| line <= l} events = line_events[nline] next if events == [:RUBY_EVENT_B_CALL] if @hook_call && events.include?(:RUBY_EVENT_CALL) && self.line == iseq.first_lineno nline = iseq.first_lineno end if !nearest || ((line - nline).abs < (line - nearest.line).abs) nearest = NearestISeq.new(iseq, nline, events) elsif @hook_call && nearest.line == iseq.first_line && events.include?(:RUBY_EVENT_CALL) nearest = NearestISeq.new(iseq, nline, events) end end end if nearest activate_exact nearest.iseq, nearest.events, nearest.line end end