rubyx-debugger/lib/views/source_view.rb

61 lines
1.5 KiB
Ruby
Raw Normal View History

require_relative "html_converter"
2015-10-29 15:49:14 +01:00
class SourceView < ElementView
def initialize interpreter
@interpreter = interpreter
@interpreter.register_event(:instruction_changed, self)
end
def draw
2015-11-01 17:11:38 +01:00
@text = div(".text")
@ticker = div(".ticker")
@element = div(".source_view") << div("h4.source" , "Class.Method") << @ticker << @text
2015-10-29 15:49:14 +01:00
@element
end
def instruction_changed
i = @interpreter.instruction
return "" unless i
update_method
2015-10-29 15:49:14 +01:00
case i.source
when AST::Node
2015-11-01 17:11:38 +01:00
id = i.source.object_id
if e = @text.at_css("#i#{id}")
if (old = @text.at_css(".fade_in"))
old.remove_class("fade_in")
end
e.add_class "fade_in"
end
2015-10-29 15:49:14 +01:00
when String
2015-10-29 15:53:46 +01:00
@ticker.text = i.source
2015-10-29 15:49:14 +01:00
else
raise i.source.class.name
end
end
2015-11-01 12:03:03 +01:00
def update_method
i = @interpreter.instruction
case i
when Register::Label
if i.name.include?(".")
cl_name , method_name = *i.name.split(".")
clazz = Register.machine.space.get_class_by_name cl_name
method = clazz.get_instance_method( method_name)
else
return
end
@element.at_css(".source").text = i.name
when Register::FunctionReturn
object = @interpreter.object_for( i.register )
link = object.internal_object_get( i.index )
method = link.method
@element.at_css(".source").text = method.name
else
return
2015-10-29 18:10:02 +01:00
end
@text.inner_html = HtmlConverter.new.process( method.source )
2015-10-29 18:10:02 +01:00
end
2015-10-29 15:49:14 +01:00
end