fix to use objects instead of ids

This commit is contained in:
Torsten Ruger 2015-11-04 20:29:09 +02:00
parent cfc5163fb6
commit 30eed9274e
5 changed files with 40 additions and 54 deletions

View File

@ -35,7 +35,7 @@ end
class ClassView < RefView class ClassView < RefView
def initialize clazz def initialize clazz
super(clazz.name , clazz.object_id , 20 ) super(clazz.name , clazz , 20 )
end end
def ref_text def ref_text

View File

@ -4,8 +4,8 @@ class ObjectView < ListView
# z is the z-index # z is the z-index
def initialize object_id , interpreter = nil , z = nil def initialize object , interpreter = nil , z = nil
@object_id = object_id @object = object
@z = z @z = z
@interpreter = interpreter @interpreter = interpreter
@interpreter.register_event(:object_changed, self) if interpreter @interpreter.register_event(:object_changed, self) if interpreter
@ -14,26 +14,24 @@ class ObjectView < ListView
def draw def draw
@element = super(@interpreter ? "ul.nav!" : "ul") @element = super(@interpreter ? "ul.nav!" : "ul")
prepend_element div( "li" ) << div("span" , class_header(@object_id) ) prepend_element div( "li" ) << div("span" , class_header )
return @element return @element
end end
def object_changed reg , at def object_changed reg , at
#puts "Object changed in #{reg} , at #{at}" #puts "Object changed in #{reg} , at #{at}"
for_object = @interpreter.get_register( reg ) for_object = @interpreter.get_register( reg )
return unless for_object == @object_id return unless for_object == @object
#puts "Object changed #{for_object} , at #{at}" #puts "Object changed #{for_object} , at #{at}"
object = Register.machine.objects[@object_id] variable = @object.get_instance_variables.get(at)
raise "error #{@object_id} , #{at}" unless object and ! object.is_a?(String)
variable = object.get_instance_variables.get(at)
if(variable) if(variable)
f = object.get_instance_variable(variable) f = @object.get_instance_variable(variable)
else else
variable = (at - object.class.get_length_index).to_s variable = (at - @object.class.get_length_index).to_s
f = object.internal_object_get(at) f = @object.internal_object_get(at)
end end
#puts "got var name #{variable}#{variable.class} for #{at}, #{f}" #puts "got var name #{variable}#{variable.class} for #{at}, #{f}"
view = RefView.new( variable , oid(f) , @z ) view = RefView.new( variable , f , @z )
if( @children[at] ) if( @children[at] )
replace_at(at , view) replace_at(at , view)
else else
@ -41,24 +39,23 @@ class ObjectView < ListView
end end
end end
def class_header(id) def class_header
object = Register.machine.objects[id] clazz = @object.class.name.split("::").last
clazz = object.class.name.split("::").last [clazz, @object.object_id].join " : "
[clazz, id].join " : "
end end
def content_elements def content_elements
object = Register.machine.objects[@object_id]
fields = [ConstantView.new("li" , "-------------------------")] fields = [ConstantView.new("li" , "-------------------------")]
object = @object
if object and ! object.is_a?(String) if object and ! object.is_a?(String)
object.get_instance_variables.each do |variable| object.get_instance_variables.each do |variable|
f = object.get_instance_variable(variable) f = object.get_instance_variable(variable)
fields << RefView.new( variable , oid(f) , @z ) fields << RefView.new( variable , f , @z )
end end
if( object.is_a?(Parfait::Indexed) ) if( object.is_a?(Parfait::Indexed) )
index = 1 index = 1
object.each do | o| object.each do | o|
fields << RefView.new( index.to_s , oid(o) , @z ) fields << RefView.new( index.to_s , o , @z )
index += 1 index += 1
end end
end end
@ -66,8 +63,4 @@ class ObjectView < ListView
fields fields
end end
def oid o
return o if o.is_a? Fixnum
return o.object_id
end
end end

View File

@ -22,7 +22,7 @@ class RefView < ListView
end end
def ref_text def ref_text
"#{@name} : #{marker(@value)}" "#{@name} : #{marker()}"
end end
def add_hover def add_hover
@ -31,21 +31,21 @@ class RefView < ListView
end end
def is_object?( ) def is_object?( )
has = Register.machine.objects[@value] return false if @value.is_a?(Fixnum)
return false unless has return false unless @value
! is_label? ! is_label?
end end
def is_string?() def is_string?()
Register.machine.objects[@value].is_a? String @value.is_a? String
end end
def is_label? def is_label?
Register.machine.objects[@value].is_a?(Register::Label) @value.is_a?(Register::Label)
end end
def is_nil?() def is_nil?()
Register.machine.objects[@value].nil? @value.nil?
end end
def hover def hover
@ -54,13 +54,13 @@ class RefView < ListView
@element.off("hover") @element.off("hover")
end end
def marker id def marker
if is_string? if is_string?
str = @value str = @value
elsif is_object? elsif is_object?
var = Register.machine.objects[id] var = @value
str = var.class.name.split("::").last[0,2] str = var.class.name.split("::").last[0,2]
str + " : #{id.to_s}" str + " : #{@value.object_id}"
elsif is_label? elsif is_label?
str = "Label" str = "Label"
else else

View File

@ -24,7 +24,7 @@ class RegistersView < ListView
def register_changed reg , old , value def register_changed reg , old , value
reg = reg.symbol unless reg.is_a? Symbol reg = reg.symbol unless reg.is_a? Symbol
index = reg.to_s[1 .. -1 ].to_i index = reg.to_s[1 .. -1 ].to_i
has = Register.machine.objects[value] has = Register.machine.objects[value.object_id]
if( has ) if( has )
if has.is_a?(Register::Label) if has.is_a?(Register::Label)
swap = ValueView.new "Label: #{has.name}" swap = ValueView.new "Label: #{has.name}"
@ -38,12 +38,6 @@ class RegistersView < ListView
# @elements[index].style["z-index"] = -index # @elements[index].style["z-index"] = -index
end end
def is_object?( id )
has = Register.machine.objects[id]
return false unless has
has.is_a?(Register::Label) ? false : true
end
end end
class ValueView < ElementView class ValueView < ElementView

View File

@ -36,24 +36,23 @@ class SourceView < ElementView
def update_method def update_method
i = @interpreter.instruction i = @interpreter.instruction
case i if i.is_a?(Register::FunctionReturn)
when Register::Label object = @interpreter.get_register( i.register )
if i.name.include?(".") #puts "Object #{object}"
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 ) link = object.internal_object_get( i.index )
method = link.method #puts "Link #{link}"
@element.at_css(".source").text = method.name raise "No link method" unless link
i = link
end
return unless (i.is_a? Register::Label)
if i.is_method
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 else
return return
end end
@element.at_css(".source").text = i.name
@text.inner_html = HtmlConverter.new.process( method.source ) @text.inner_html = HtmlConverter.new.process( method.source )
end end