Move add_object to collector
more changes to come
This commit is contained in:
parent
b9073d0c88
commit
853a531578
@ -8,20 +8,19 @@ module Register
|
|||||||
constants.each {|obj| keep(obj,0)}
|
constants.each {|obj| keep(obj,0)}
|
||||||
end
|
end
|
||||||
|
|
||||||
def keep object , depth
|
def keep( object , depth )
|
||||||
return if object.nil?
|
return if object.nil?
|
||||||
#puts "adding #{' ' * depth}:#{object.class}"
|
return unless add_object( object , depth )
|
||||||
#puts "ADD #{object.inspect}, #{object.hash}" if object.is_a? Parfait::Type
|
|
||||||
return unless add_object( object )
|
|
||||||
# probably should make labels or even instructions derive from Parfait::Object, but . .
|
# probably should make labels or even instructions derive from Parfait::Object, but . .
|
||||||
if object.is_a? Register::Label
|
if object.is_a? Register::Label
|
||||||
object.each_label { |l| self.add_object(l)}
|
object.each_label { |l| self.add_object(l ,depth)}
|
||||||
end
|
end
|
||||||
return unless object.respond_to? :has_type?
|
return unless object.respond_to? :has_type?
|
||||||
type = object.get_type
|
type = object.get_type
|
||||||
keep(type , depth + 1)
|
keep(type , depth + 1)
|
||||||
return if object.is_a? Symbol
|
return if object.is_a? Symbol
|
||||||
type.names.each do |name|
|
type.names.each do |name|
|
||||||
|
keep(name , depth + 1)
|
||||||
#puts "Keep #{name} for #{object.class}"
|
#puts "Keep #{name} for #{object.class}"
|
||||||
inst = object.get_instance_variable name
|
inst = object.get_instance_variable name
|
||||||
keep(inst , depth + 1)
|
keep(inst , depth + 1)
|
||||||
@ -33,5 +32,28 @@ module Register
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
# Objects are data and get assembled after functions
|
||||||
|
def add_object( objekt , depth)
|
||||||
|
return false if @objects[objekt.object_id]
|
||||||
|
return true if objekt.is_a? Fixnum
|
||||||
|
#puts message(objekt , depth)
|
||||||
|
#puts "ADD #{objekt.inspect}, #{objekt.name}" if objekt.is_a? Parfait::TypedMethod
|
||||||
|
unless objekt.is_a?( Parfait::Object) or objekt.is_a?( Symbol) or objekt.is_a?( Register::Label)
|
||||||
|
raise "adding non parfait #{objekt.class}"
|
||||||
|
end
|
||||||
|
#raise "Method #{objekt.name}" if objekt.is_a? Parfait::TypedMethod
|
||||||
|
@objects[objekt.object_id] = objekt
|
||||||
|
true
|
||||||
|
end
|
||||||
|
|
||||||
|
def message(object , depth)
|
||||||
|
msg = "adding #{depth}#{' ' * depth}:"
|
||||||
|
if( object.respond_to?(:sof_reference_name))
|
||||||
|
msg + object.sof_reference_name.to_s
|
||||||
|
else
|
||||||
|
msg + object.class.name
|
||||||
|
end
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
@ -36,7 +36,7 @@ module Register
|
|||||||
def translate_methods(methods)
|
def translate_methods(methods)
|
||||||
translator = Arm::Translator.new
|
translator = Arm::Translator.new
|
||||||
methods.each do |method|
|
methods.each do |method|
|
||||||
log.debug "Method #{method.name}"
|
log.debug "Translate method #{method.name}"
|
||||||
instruction = method.instructions
|
instruction = method.instructions
|
||||||
while instruction.next
|
while instruction.next
|
||||||
nekst = instruction.next
|
nekst = instruction.next
|
||||||
@ -50,18 +50,6 @@ module Register
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
# Objects are data and get assembled after functions
|
|
||||||
def add_object( objekt )
|
|
||||||
return false if @objects[objekt.object_id]
|
|
||||||
return true if objekt.is_a? Fixnum
|
|
||||||
unless objekt.is_a?( Parfait::Object) or objekt.is_a?( Symbol) or objekt.is_a?( Register::Label)
|
|
||||||
raise "adding non parfait #{objekt.class}"
|
|
||||||
end
|
|
||||||
#raise "Method #{objekt.name}" if objekt.is_a? Parfait::TypedMethod
|
|
||||||
@objects[objekt.object_id] = objekt
|
|
||||||
true
|
|
||||||
end
|
|
||||||
|
|
||||||
def boot
|
def boot
|
||||||
initialize
|
initialize
|
||||||
boot_parfait!
|
boot_parfait!
|
||||||
|
Loading…
Reference in New Issue
Block a user