class DEBUGGER__::SourceRepository

Constants

SrcInfo

ruby 3.0 or earlier

Public Class Methods

new() click to toggle source
# File debug-1.6.3/lib/debug/source_repository.rb, line 14
def initialize
  # cache
  @cmap = ObjectSpace::WeakMap.new
  @loaded_file_map = {} # path => nil
end

Public Instance Methods

add(iseq, src) click to toggle source
# File debug-1.6.3/lib/debug/source_repository.rb, line 20
def add iseq, src
  # do nothing
  if (path = (iseq.absolute_path || iseq.path)) && File.exist?(path)
    if @loaded_file_map.has_key? path
      return path, true # reloaded
    else
      @loaded_file_map[path] = path
      return path, false
    end
  end
end
add_iseq(iseq, src) click to toggle source
# File debug-1.6.3/lib/debug/source_repository.rb, line 85
        def add_iseq iseq, src
  line = iseq.first_line
  if line > 1
    src = ("\n" * (line - 1)) + src
  end
  si = SrcInfo.new(src.lines)
  all_iseq(iseq).each{|e|
    e.instance_variable_set(:@debugger_si, si)
    e.freeze
  }
end
add_path(path) click to toggle source
# File debug-1.6.3/lib/debug/source_repository.rb, line 97
        def add_path path
  src_lines = File.readlines(path, chomp: true)
  @files[path] = SrcInfo.new(src_lines)
rescue SystemCallError
end
all_iseq(iseq, rs = []) click to toggle source
# File debug-1.6.3/lib/debug/source_repository.rb, line 77
        def all_iseq iseq, rs = []
  rs << iseq
  iseq.each_child{|ci|
    all_iseq(ci, rs)
  }
  rs
end
get(iseq) click to toggle source
# File debug-1.6.3/lib/debug/source_repository.rb, line 32
def get iseq
  return unless iseq

  if lines = iseq.script_lines&.map(&:chomp)
    lines
  else
    if (path = (iseq.absolute_path || iseq.path)) && File.exist?(path)
      File.readlines(path, chomp: true)
    else
      nil
    end
  end
end
get_colored(iseq) click to toggle source
# File debug-1.6.3/lib/debug/source_repository.rb, line 46
def get_colored iseq
  if lines = @cmap[iseq]
    lines
  else
    if src_lines = get(iseq)
      @cmap[iseq] = colorize_code(src_lines.join("\n")).lines
    else
      nil
    end
  end
end
get_si(iseq) click to toggle source
# File debug-1.6.3/lib/debug/source_repository.rb, line 103
        def get_si iseq
  return unless iseq

  if iseq.instance_variable_defined?(:@debugger_si)
    iseq.instance_variable_get(:@debugger_si)
  elsif @files.has_key?(path = (iseq.absolute_path || iseq.path))
    @files[path]
  elsif path
    add_path(path)
  end
end