class DEBUGGER__::SourceRepository

Constants

SrcInfo

ruby 3.0 or earlier

Public Class Methods

new() click to toggle source
# File debug-1.8.0/lib/debug/source_repository.rb, line 30
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.8.0/lib/debug/source_repository.rb, line 36
def add iseq, src
  # only manage loaded file names
  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.8.0/lib/debug/source_repository.rb, line 104
        def add_iseq iseq, src
  line = iseq.first_line
  if line > 1
    src = ("\n" * (line - 1)) + src
  end

  si = SrcInfo.new(src.each_line.map{|l| l.chomp})
  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.8.0/lib/debug/source_repository.rb, line 117
        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.8.0/lib/debug/source_repository.rb, line 96
        def all_iseq iseq, rs = []
  rs << iseq
  iseq.each_child{|ci|
    all_iseq(ci, rs)
  }
  rs
end
file_src(iseq) click to toggle source
# File debug-1.8.0/lib/debug/source_repository.rb, line 9
def file_src iseq
  if (path = (iseq.absolute_path || iseq.path)) && File.exist?(path)
    File.readlines(path, chomp: true)
  end
end
get(iseq) click to toggle source
# File debug-1.8.0/lib/debug/source_repository.rb, line 15
def get iseq
  return unless iseq

  if CONFIG[:show_evaledsrc]
    orig_src(iseq) || file_src(iseq)
  else
    file_src(iseq) || orig_src(iseq)
  end
end
get_colored(iseq) click to toggle source
# File debug-1.8.0/lib/debug/source_repository.rb, line 58
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.8.0/lib/debug/source_repository.rb, line 123
        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
orig_src(iseq) click to toggle source
# File debug-1.8.0/lib/debug/source_repository.rb, line 48
def orig_src iseq
  lines = iseq.script_lines&.map(&:chomp)
  line = iseq.first_line
  if line > 1
    [*([''] * (line - 1)), *lines]
  else
    lines
  end
end