block_identifier()
click to toggle source
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
def c_identifier
return unless frame_type == :c
"[C] #{klass_sig}#{location.base_label}"
end
callee()
click to toggle source
def callee
self._callee ||= self.binding&.eval('__callee__')
end
eval_binding()
click to toggle source
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
def file_lines
SESSION.source(self.iseq)
end
frame_type()
click to toggle source
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
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
def location_str
"#{pretty_path}:#{location.lineno}"
end
method_identifier()
click to toggle source
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
def name
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
def other_identifier
return unless frame_type == :other
location.label
end
path()
click to toggle source
def path
location.path
end
pretty_path()
click to toggle source
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
def realpath
location.absolute_path
end
return_str()
click to toggle source
def return_str
if self.binding && iseq && has_return_value
DEBUGGER__.safe_inspect(return_value, short: true)
end
end