In Files

  • debug-1.4.0/lib/debug/frame_info.rb

DEBUGGER__::FrameInfo

Public Instance Methods

block_identifier() click to toggle source
 
               # File debug-1.4.0/lib/debug/frame_info.rb, line 84
def block_identifier
  return unless frame_type == :block
  args = parameters_info(iseq.argc)
  _, level, block_loc = location.label.match(BLOCK_LABL_REGEXP).to_a
  [level || "", block_loc, args]
end
            
c_identifier() click to toggle source
 
               # File debug-1.4.0/lib/debug/frame_info.rb, line 98
def c_identifier
  return unless frame_type == :c
  "[C] #{klass_sig}#{location.base_label}"
end
            
callee() click to toggle source
 
               # File debug-1.4.0/lib/debug/frame_info.rb, line 108
def callee
  self._callee ||= self.binding&.eval('__callee__')
end
            
eval_binding() click to toggle source
 
               # File debug-1.4.0/lib/debug/frame_info.rb, line 122
def eval_binding
  if b = self.dupped_binding
    b
  else
    b = TOPLEVEL_BINDING unless b = self.binding
    b = self.binding || TOPLEVEL_BINDING
    self.dupped_binding = b.dup
  end
end
            
file_lines() click to toggle source
 
               # File debug-1.4.0/lib/debug/frame_info.rb, line 64
def file_lines
  SESSION.source(self.iseq)
end
            
frame_type() click to toggle source
 
               # File debug-1.4.0/lib/debug/frame_info.rb, line 68
def frame_type
  if self.local_variables && iseq
    if iseq.type == :block
      :block
    elsif callee
      :method
    else
      :other
    end
  else
    :c
  end
end
            
local_variables() click to toggle source
 
               # File debug-1.4.0/lib/debug/frame_info.rb, line 132
def local_variables
  if lvars = self._local_variables
    lvars
  elsif b = self.binding
    b.local_variables.map{|var|
      [var, b.local_variable_get(var)]
    }.to_h
  end
end
            
location_str() click to toggle source
 
               # File debug-1.4.0/lib/debug/frame_info.rb, line 118
def location_str
  "#{pretty_path}:#{location.lineno}"
end
            
method_identifier() click to toggle source
 
               # File debug-1.4.0/lib/debug/frame_info.rb, line 91
def method_identifier
  return unless frame_type == :method
  args = parameters_info(iseq.argc)
  ci = "#{klass_sig}#{callee}"
  [ci, args]
end
            
name() click to toggle source
 
               # File debug-1.4.0/lib/debug/frame_info.rb, line 48
def name
  # p frame_type: frame_type, self: self
  case frame_type
  when :block
    level, block_loc, _args = block_identifier
    "block in #{block_loc}#{level}"
  when :method
    ci, _args = method_identifier
    "#{ci}"
  when :c
    c_identifier
  when :other
    other_identifier
  end
end
            
other_identifier() click to toggle source
 
               # File debug-1.4.0/lib/debug/frame_info.rb, line 103
def other_identifier
  return unless frame_type == :other
  location.label
end
            
path() click to toggle source
 
               # File debug-1.4.0/lib/debug/frame_info.rb, line 22
def path
  location.path
end
            
pretty_path() click to toggle source
 
               # File debug-1.4.0/lib/debug/frame_info.rb, line 30
def pretty_path
  return '#<none>' unless path = self.path
  use_short_path = CONFIG[:use_short_path]

  case
  when use_short_path && path.start_with?(dir = RbConfig::CONFIG["rubylibdir"] + '/')
    path.sub(dir, '$(rubylibdir)/')
  when use_short_path && Gem.path.any? do |gp|
      path.start_with?(dir = gp + '/gems/')
    end
    path.sub(dir, '$(Gem)/')
  when HOME && path.start_with?(HOME)
    path.sub(HOME, '~/')
  else
    path
  end
end
            
realpath() click to toggle source
 
               # File debug-1.4.0/lib/debug/frame_info.rb, line 26
def realpath
  location.absolute_path
end
            
return_str() click to toggle source
 
               # File debug-1.4.0/lib/debug/frame_info.rb, line 112
def return_str
  if self.binding && iseq && has_return_value
    DEBUGGER__.safe_inspect(return_value, short: true)
  end
end