mirror of
https://github.com/specht/champ.git
synced 2024-09-27 14:59:18 +00:00
added PC to source code
This commit is contained in:
parent
d1687f534d
commit
61ff02e98c
30
champ.rb
30
champ.rb
@ -63,6 +63,7 @@ class Champ
|
|||||||
@execution_log_size = 20
|
@execution_log_size = 20
|
||||||
@code_for_pc = {}
|
@code_for_pc = {}
|
||||||
@source_for_file = {}
|
@source_for_file = {}
|
||||||
|
@pc_for_file_and_line = {}
|
||||||
args = ARGV.dup
|
args = ARGV.dup
|
||||||
while args.size > 1
|
while args.size > 1
|
||||||
item = args.shift
|
item = args.shift
|
||||||
@ -788,25 +789,33 @@ class Champ
|
|||||||
# write error dump
|
# write error dump
|
||||||
if @error
|
if @error
|
||||||
io = StringIO.new
|
io = StringIO.new
|
||||||
io.puts "<div>"
|
io.puts "<div style='float: left; margin-right: 10px;'>"
|
||||||
io.puts "<h2>Error log</h2>"
|
io.puts "<h2>Source code</h2>"
|
||||||
|
|
||||||
io.puts "<code><pre>"
|
io.puts "<code><pre>"
|
||||||
source_code = @code_for_pc[@error[:pc]]
|
source_code = @code_for_pc[@error[:pc]]
|
||||||
STDERR.puts source_code.to_yaml
|
|
||||||
offset = source_code[:line] - 1
|
offset = source_code[:line] - 1
|
||||||
this_filename = source_code[:file]
|
this_filename = source_code[:file]
|
||||||
io.puts "<span class='heading'>#{sprintf('%-83s', this_filename)}</span>"
|
io.puts "<span class='heading'> Line | PC | #{sprintf('%-75s', this_filename)}</span>"
|
||||||
((offset - 16)..(offset + 16)).each do |i|
|
((offset - 16)..(offset + 16)).each do |i|
|
||||||
next if i < 0 || i >= @source_for_file[this_filename].size
|
next if i < 0 || i >= @source_for_file[this_filename].size
|
||||||
io.print "<span class='#{(i == offset) ? 'error' : 'code'}'>"
|
io.print "<span class='#{(i == offset) ? 'error' : 'code'}'>"
|
||||||
io.print sprintf('%5d | %-75s', i + 1, @source_for_file[this_filename][i])
|
line_pc = nil
|
||||||
|
if @pc_for_file_and_line[this_filename]
|
||||||
|
if @pc_for_file_and_line[this_filename][i]
|
||||||
|
line_pc = sprintf('0x%04x', @pc_for_file_and_line[this_filename][i + 1])
|
||||||
|
end
|
||||||
|
end
|
||||||
|
line_pc ||= ''
|
||||||
|
io.print sprintf('%5d | %6s | %-75s', i + 1, line_pc, @source_for_file[this_filename][i])
|
||||||
io.print "</span>" if i == offset
|
io.print "</span>" if i == offset
|
||||||
io.puts
|
io.puts
|
||||||
end
|
end
|
||||||
io.puts "</pre></code>"
|
io.puts "</pre></code>"
|
||||||
|
io.puts "</div>"
|
||||||
|
|
||||||
io.puts "<h3>Debug log</h3>"
|
io.puts "<div style='display: inline-block;'>"
|
||||||
|
io.puts "<h2>Execution log</h2>"
|
||||||
io.puts "<code><pre>"
|
io.puts "<code><pre>"
|
||||||
io.puts sprintf("<span class='heading'> PC | A X Y PC SP Flags </span>")
|
io.puts sprintf("<span class='heading'> PC | A X Y PC SP Flags </span>")
|
||||||
@execution_log.each do |item|
|
@execution_log.each do |item|
|
||||||
@ -817,6 +826,8 @@ class Champ
|
|||||||
|
|
||||||
io.puts "</div>"
|
io.puts "</div>"
|
||||||
|
|
||||||
|
io.puts "<div style='clear: both;'></div>"
|
||||||
|
|
||||||
report.sub!('#{error}', io.string)
|
report.sub!('#{error}', io.string)
|
||||||
else
|
else
|
||||||
report.sub!('#{error}', '')
|
report.sub!('#{error}', '')
|
||||||
@ -843,6 +854,7 @@ class Champ
|
|||||||
@source_line = -3
|
@source_line = -3
|
||||||
File.open(path, 'r') do |f|
|
File.open(path, 'r') do |f|
|
||||||
f.each_line do |line|
|
f.each_line do |line|
|
||||||
|
@pc_for_file_and_line[input_file] ||= {}
|
||||||
@source_line += 1
|
@source_line += 1
|
||||||
parts = line.split('|')
|
parts = line.split('|')
|
||||||
next unless parts.size > 2
|
next unless parts.size > 2
|
||||||
@ -855,14 +867,12 @@ class Champ
|
|||||||
code_parts = code.split(/\s+/)
|
code_parts = code.split(/\s+/)
|
||||||
|
|
||||||
line_number = parts[1].split(' ').map { |x| x.strip }.reject { |x| x.empty? }.last.to_i
|
line_number = parts[1].split(' ').map { |x| x.strip }.reject { |x| x.empty? }.last.to_i
|
||||||
# unless (@pc_code_lines.last || 0) == pc
|
|
||||||
STDERR.puts line_number
|
|
||||||
@code_for_pc[pc] = {
|
@code_for_pc[pc] = {
|
||||||
:file => input_file,
|
:file => input_file,
|
||||||
:line => line_number,
|
:line => line_number,
|
||||||
}
|
}
|
||||||
# @pc_code_lines << pc
|
@pc_for_file_and_line[input_file][line_number] = pc
|
||||||
# end
|
|
||||||
|
|
||||||
next if code_parts.empty?
|
next if code_parts.empty?
|
||||||
label = nil
|
label = nil
|
||||||
|
Loading…
Reference in New Issue
Block a user