Class: LexerKit::Debug::Disassembler
- Inherits:
-
Object
- Object
- LexerKit::Debug::Disassembler
- Defined in:
- lib/lexer_kit/debug/disassembler.rb
Overview
Disassembler for CompiledProgram instructions
Instance Method Summary collapse
-
#disassemble(io: nil) ⇒ String
Disassemble all instructions.
-
#initialize(program) ⇒ Disassembler
constructor
A new instance of Disassembler.
Constructor Details
#initialize(program) ⇒ Disassembler
Returns a new instance of Disassembler.
9 10 11 |
# File 'lib/lexer_kit/debug/disassembler.rb', line 9 def initialize(program) @program = program end |
Instance Method Details
#disassemble(io: nil) ⇒ String
Disassemble all instructions
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 |
# File 'lib/lexer_kit/debug/disassembler.rb', line 16 def disassemble(io: nil) output = io || StringIO.new # Header output.puts "# LexerKit Disassembly" output.puts "# Version: #{@program.version}" output.puts "# Instructions: #{@program.instructions.size}" output.puts "# Tokens: #{@program.token_names.join(', ')}" output.puts "# Modes: #{@program.mode_names.join(', ')}" output.puts # Mode labels mode_labels = {} @program.mode_offsets.each do |name, offset| mode_labels[offset] = name end # Disassemble each instruction @program.instructions.each_with_index do |instr, offset| # Mode label if mode_labels[offset] output.puts output.puts "#{mode_labels[offset]}:" end line = format_instruction(offset, instr) output.puts line end io ? nil : output.string end |