rubyx/lib/vm/parfait/behaviour.rb

56 lines
1.5 KiB
Ruby
Raw Normal View History

2016-12-06 10:38:09 +01:00
# Behaviour is something that has methods, basically class and modules superclass
2016-12-06 10:38:09 +01:00
# instance_methods is the attribute in the including class that has the methods
module Parfait
module Behaviour
def initialize
super()
@instance_methods = List.new
end
def methods
m = @instance_methods
return m if m
@instance_methods = List.new
end
2016-12-06 10:38:09 +01:00
def method_names
names = List.new
self.methods.each do |method|
names.push method.name
end
names
end
2016-12-15 13:00:34 +01:00
def add_instance_method( method )
raise "not implemented #{method.class} #{method.inspect}" unless method.is_a? RubyMethod
method
end
2016-12-15 13:00:34 +01:00
def remove_instance_method( method_name )
found = get_instance_method( method_name )
2016-12-15 13:00:34 +01:00
found ? self.methods.delete(found) : false
end
2016-12-15 13:00:34 +01:00
def get_instance_method( fname )
raise "get_instance_method #{fname}.#{fname.class}" unless fname.is_a?(Symbol)
#if we had a hash this would be easier. Detect or find would help too
2016-12-15 13:00:34 +01:00
self.methods.find {|m| m.name == fname }
end
# get the method and if not found, try superclasses. raise error if not found
def resolve_method m_name
raise "resolve_method #{m_name}.#{m_name.class}" unless m_name.is_a?(Symbol)
method = get_instance_method(m_name)
return method if method
if( @super_class_name != :Object )
method = self.super_class.resolve_method(m_name)
end
method
end
end
end