diff --git a/lib/parfait.rb b/lib/parfait.rb index 565ad99f..167945d3 100644 --- a/lib/parfait.rb +++ b/lib/parfait.rb @@ -2,6 +2,7 @@ require "parfait/value" require "parfait/integer" require "parfait/object" require "parfait/module" +require "parfait/meta_class" require "parfait/class" require "parfait/list" require "parfait/word" diff --git a/lib/parfait/binary_code.rb b/lib/parfait/binary_code.rb index 02376476..9eaf37cb 100644 --- a/lib/parfait/binary_code.rb +++ b/lib/parfait/binary_code.rb @@ -14,6 +14,8 @@ module Parfait super(0) @name = name end + attr_reader :name + # this is a sof check if there are instance variables or "structure" # have to override false, as word answers true def is_value? diff --git a/lib/parfait/meta_class.rb b/lib/parfait/meta_class.rb index e311dbc6..6f07d5d2 100644 --- a/lib/parfait/meta_class.rb +++ b/lib/parfait/meta_class.rb @@ -1,4 +1,4 @@ -module Virtual +module Parfait # TODO : rethink - possibly needs to be a module to be mixed into Object # diff --git a/lib/parfait/method.rb b/lib/parfait/method.rb index 0a815dff..9c4c9d16 100644 --- a/lib/parfait/method.rb +++ b/lib/parfait/method.rb @@ -26,8 +26,8 @@ module Parfait @name = name @code = BinaryCode.new_object name @arg_names = arg_names - @locals = [] - @tmps = [] + @locals = List.new + @tmps = List.new end attr_reader :name , :arg_names , :for_class , :code diff --git a/lib/parfait/module.rb b/lib/parfait/module.rb index 7995db4d..ecbf17f2 100644 --- a/lib/parfait/module.rb +++ b/lib/parfait/module.rb @@ -19,7 +19,7 @@ module Parfait @instance_methods = List.new_object @name = name @super_class = superclass - @meta_class = Virtual::MetaClass.new(self) + @meta_class = MetaClass.new(self) end def name @@ -71,7 +71,7 @@ module Parfait # get the method and if not found, try superclasses. raise error if not found def resolve_method m_name - raise "uups #{m_name}.#{m_name.class}" unless m_name.is_a? Word + raise "uups #{m_name}.#{m_name.class}" unless m_name.is_a?(Word) or m_name.is_a?(String) method = get_instance_method(m_name) return method if method if( @super_class ) diff --git a/lib/virtual/parfait_adapter.rb b/lib/virtual/parfait_adapter.rb index 4eb3f190..d474fa47 100644 --- a/lib/virtual/parfait_adapter.rb +++ b/lib/virtual/parfait_adapter.rb @@ -27,7 +27,7 @@ module FakeMem #TODO, this is copied from module Positioned, maybe avoid duplication ? def position if @position == nil - raise "position accessed but not set at #{mem_length} for #{self.inspect[0...1000]}" + raise "position not set for #{self.class} at #{mem_length} for #{self.inspect[0...1000]}" end @position end diff --git a/lib/virtual/passes/collector.rb b/lib/virtual/passes/collector.rb index 048b3a80..87aeb8f5 100644 --- a/lib/virtual/passes/collector.rb +++ b/lib/virtual/passes/collector.rb @@ -10,12 +10,12 @@ module Virtual def keep object return if object.nil? return unless Machine.instance.add_object object -# puts "adding #{object.class}" + #puts "adding #{object.class}" unless object.has_layout? object.init_layout end layout = object.get_layout - puts "Layout #{layout.get_object_class.name} #{Machine.instance.objects.include?(layout)}" + #puts "Layout #{layout.get_object_class.name} #{Machine.instance.objects.include?(layout)}" keep layout layout.each do |name| inst = object.instance_variable_get "@#{name}".to_sym diff --git a/lib/virtual/passes/send_implementation.rb b/lib/virtual/passes/send_implementation.rb index 9a8bedc8..326a928d 100644 --- a/lib/virtual/passes/send_implementation.rb +++ b/lib/virtual/passes/send_implementation.rb @@ -24,7 +24,7 @@ module Virtual elsif( me.is_a? Parfait::Object ) # get the function from my class. easy peasy puts "Me is #{me.class}" - method = me.get_class.get_instance_method(Virtual.new_word code.name) + method = me.get_class.get_instance_method(code.name) raise "Method not implemented #{me.class}.#{code.name}" unless method new_codes << MethodCall.new( method ) else @@ -39,7 +39,7 @@ module Virtual if ref.type.is_a?(Reference) and ref.type.of_class #find method and call clazz = ref.type.of_class - method = clazz.resolve_method Virtual.new_word(code.name) + method = clazz.resolve_method code.name raise "No method found #{code.name}" unless method new_codes << MethodCall.new( method ) else