improve boot
also move to superclass not superclass_name in class Makes ripples
This commit is contained in:
@ -15,12 +15,12 @@ require_relative "meta_class"
|
||||
module Parfait
|
||||
class Class < Module
|
||||
|
||||
def initialize name , super_class_name = :Object
|
||||
def initialize name , super_class = nil
|
||||
super()
|
||||
# class methods
|
||||
@instance_methods = []
|
||||
@name = name.to_sym
|
||||
@super_class_name = super_class_name.to_sym
|
||||
@super_class = super_class
|
||||
@meta_class = Virtual::MetaClass.new(self)
|
||||
@object_layout = []
|
||||
end
|
||||
@ -31,6 +31,13 @@ module Parfait
|
||||
@instance_methods << method
|
||||
end
|
||||
|
||||
# this needs to be done during booting as we can't have all the classes and superclassses
|
||||
# instantiated. By that logic it should maybe be part of vm rather.
|
||||
# On the other hand vague plans to load the hierachy from sof exist, so for now...
|
||||
def set_super_class sup
|
||||
@super_class = sup
|
||||
end
|
||||
|
||||
def set_instance_names list
|
||||
@object_layout = Layout.new_object
|
||||
@object_layout.set_names list
|
||||
@ -45,7 +52,7 @@ module Parfait
|
||||
def resolve_method m_name
|
||||
method = get_instance_method(m_name)
|
||||
unless method
|
||||
unless( @name == :Object)
|
||||
unless( @name == "Object" )
|
||||
supr = Space.space.get_class_by_name(@super_class_name)
|
||||
method = supr.resolve_method(m_name)
|
||||
end
|
||||
|
@ -33,7 +33,7 @@ module Virtual
|
||||
name = name.to_sym
|
||||
f = @functions.detect{ |f| f.name == name }
|
||||
return f if f
|
||||
if( @me_self == :Object )
|
||||
if( @me_self == "Object" )
|
||||
puts "no function for :#{name} in Meta #{@me_self.inspect}"
|
||||
return nil
|
||||
else #recurse up class hierachy unless we're at Object
|
||||
|
@ -53,7 +53,7 @@ module Parfait
|
||||
# this is the way to instantiate classes (not Parfait::Class.new)
|
||||
# so we get and keep exactly one per name
|
||||
def get_class_by_name name
|
||||
raise "uups #{name}.#{name.class}" unless name.is_a? Symbol
|
||||
raise "uups #{name}.#{name.class}" unless name.is_a? String or name.is_a? Word
|
||||
c = @classes[name]
|
||||
c
|
||||
end
|
||||
|
Reference in New Issue
Block a user