Module: Trepan::Disassemble
- Defined in:
- app/disassemble.rb
Class Method Summary collapse
- .disassemble_split(disassembly_str) ⇒ Object
-
.mark_disassembly(disassembly_str, iseq_equal, pc_offset, brkpt_offsets = [], max_width = 80, highlight = nil) ⇒ Object
FIXME: turn final optional params into a hash.
Class Method Details
.disassemble_split(disassembly_str) ⇒ Object
62 63 64 65 66 67 68 69 |
# File 'app/disassemble.rb', line 62 def disassemble_split(disassembly_str) dis_array = disassembly_str.split(/\n/) dis_hash = {} dis_array.each do |line| dis_hash[$1.to_i] = line if line =~ /^(\d{4}) / end dis_hash end |
.mark_disassembly(disassembly_str, iseq_equal, pc_offset, brkpt_offsets = [], max_width = 80, highlight = nil) ⇒ Object
FIXME: turn final optional params into a hash.
10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 |
# File 'app/disassemble.rb', line 10 def mark_disassembly(disassembly_str, iseq_equal, pc_offset, brkpt_offsets=[], max_width=80, highlight=nil) dis_array = disassembly_str.split(/\n/) if highlight begin require_relative '../app/yarv' @highlighter ||= CodeRay::Duo[:yarv, :term] rescue LoadError dis_array. unshift('** Highlighting requested but CodeRay is not installed.') highlight = false end end dis_array.map do |line| if line =~ /^(.*?)(\s+)(\(\s+\d+\))?$/ line_begin = $1 line_padding = $2 line_end = $3 || '' else line_begin = line line_padding = '' line_end = '' end prefix = if line =~ /^(\d{4}) / offset = $1.to_i bp = brkpt_offsets && brkpt_offsets.member?(offset) ? 'B' : ' ' bp + if offset == pc_offset && iseq_equal '--> ' else ' ' end else '' end line_size = prefix.size + line.size shrink_amount = line_size - max_width if (shrink_amount > 0) && line_padding.size > shrink_amount line_padding = ' ' * (line_padding.size - shrink_amount) end if highlight && prefix != '' prefix + @highlighter.encode(line_begin + line_padding + line_end) else prefix + line_begin + line_padding + line_end end end end |