diff --git a/lib/risc/collector.rb b/lib/risc/collector.rb index ddaafdef..6b27df8e 100644 --- a/lib/risc/collector.rb +++ b/lib/risc/collector.rb @@ -12,10 +12,6 @@ module Risc def self.keep( object , depth ) return if object.nil? return unless add_object( object , depth ) - # probably should make labels or even instructions derive from Parfait::Object, but . . - if object.is_a? Risc::Label - object.each { |l| self.add_object(l ,depth) if l.is_a? Risc::Label} - end return unless object.respond_to? :has_type? type = object.get_type keep(type , depth + 1) @@ -36,9 +32,10 @@ module Risc def self.add_object( objekt , depth) return false if @objects[objekt.object_id] return true if objekt.is_a? Fixnum + return true if objekt.is_a?( Risc::Label) #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?( Risc::Label) + unless objekt.is_a?( Parfait::Object) or objekt.is_a?( Symbol) raise "adding non parfait #{objekt.class}:#{objekt}" end #raise "Method #{objekt.name}" if objekt.is_a? Parfait::TypedMethod diff --git a/lib/risc/machine.rb b/lib/risc/machine.rb index 220ab96a..460efb8d 100644 --- a/lib/risc/machine.rb +++ b/lib/risc/machine.rb @@ -96,6 +96,7 @@ module Risc def boot initialize @objects = nil + @translated = false boot_parfait! @risc_init = Branch.new( "__initial_branch__" , Parfait.object_space.get_init.risc_instructions ) @booted = true diff --git a/test/risc/test_collector.rb b/test/risc/test_collector.rb index f34a4381..a2d0d8a5 100644 --- a/test/risc/test_collector.rb +++ b/test/risc/test_collector.rb @@ -9,16 +9,22 @@ module Risc def test_simple_collect objects = Risc::Collector.collect_space - assert ((350 < objects.length) or (430 > objects.length)) , objects.length.to_s + assert ((400 < objects.length) or (450 > objects.length)) , objects.length.to_s end def test_collect_all_types - objects = Risc::Collector.collect_space - objects.each do |id, objekt| + Risc::Collector.collect_space.each do |id, objekt| next unless objekt.is_a?( Parfait::Type ) assert Parfait.object_space.get_type_for( objekt.hash ) , objekt.hash end end + def test_allowed_types + Risc::Collector.collect_space.each do |id, objekt| + next if objekt.is_a?( Parfait::Object ) + next if objekt.is_a?( Symbol ) + assert_equal 1 , objekt.class + end + end end end diff --git a/test/risc/test_machine.rb b/test/risc/test_machine.rb index 37ad8a65..404765bd 100644 --- a/test/risc/test_machine.rb +++ b/test/risc/test_machine.rb @@ -10,14 +10,20 @@ module Risc def test_objects objects = @machine.objects assert_equal Hash , objects.class - assert 400 < objects.length + assert 350 < objects.length end - def test_position + def test_position_length @machine.position_all objects = @machine.objects assert_equal Hash , objects.class - assert 400 < objects.length + assert 350 < objects.length + end + def test_has_positions + @machine.position_all + @machine.objects.each do |id,obj| + assert Positioned.position(obj) + end end end end