move meta and boot class to parfait
just cosmetic, fixed requires but not code
This commit is contained in:
parent
b804354236
commit
73a6a5db39
9
lib/parfait.rb
Normal file
9
lib/parfait.rb
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
require "parfait/value"
|
||||||
|
require "parfait/object"
|
||||||
|
require "parfait/module"
|
||||||
|
require "parfait/class"
|
||||||
|
require "parfait/hash"
|
||||||
|
require "parfait/array"
|
||||||
|
require "parfait/string"
|
||||||
|
require "parfait/message"
|
||||||
|
require "parfait/frame"
|
@ -1,6 +1,8 @@
|
|||||||
|
|
||||||
# Class derives from and derives most of it's functionality (that you would associate with a class)
|
# Class derives from and derives most of it's functionality (that you would associate with a class)
|
||||||
# from there
|
# from there
|
||||||
|
# class is mainly a list of methods with a name (for now)
|
||||||
|
# layout of object is seperated into Layout
|
||||||
|
|
||||||
# A Class is a module that can be instantiated
|
# A Class is a module that can be instantiated
|
||||||
|
|
||||||
@ -8,8 +10,55 @@
|
|||||||
# The Layout lists the names of the instance variables
|
# The Layout lists the names of the instance variables
|
||||||
# The class keeps a list of instance methods, these have a name and code
|
# The class keeps a list of instance methods, these have a name and code
|
||||||
|
|
||||||
|
require_relative "meta_class"
|
||||||
|
|
||||||
module Parfait
|
module Parfait
|
||||||
class Class < Module
|
class Class < Module
|
||||||
|
|
||||||
|
def initialize name , super_class_name = :Object
|
||||||
|
super()
|
||||||
|
# class methods
|
||||||
|
@instance_methods = []
|
||||||
|
@name = name.to_sym
|
||||||
|
@super_class_name = super_class_name.to_sym
|
||||||
|
@meta_class = Virtual::MetaClass.new(self)
|
||||||
|
end
|
||||||
|
attr_reader :name , :instance_methods , :meta_class , :context , :super_class_name
|
||||||
|
def add_instance_method method
|
||||||
|
raise "not a method #{method.class} #{method.inspect}" unless method.is_a? Virtual::CompiledMethod
|
||||||
|
raise "syserr " unless method.name.is_a? Symbol
|
||||||
|
@instance_methods << method
|
||||||
|
end
|
||||||
|
|
||||||
|
def get_instance_method fname
|
||||||
|
fname = fname.to_sym
|
||||||
|
@instance_methods.detect{ |fun| fun.name == fname }
|
||||||
|
end
|
||||||
|
|
||||||
|
# get the method and if not found, try superclasses. raise error if not found
|
||||||
|
def resolve_method m_name
|
||||||
|
method = get_instance_method(m_name)
|
||||||
|
unless method
|
||||||
|
unless( @name == :Object)
|
||||||
|
supr = BootSpace.space.get_or_create_class(@super_class_name)
|
||||||
|
method = supr.resolve_method(m_name)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
raise "Method not found #{m_name}, for #{@name}" unless method
|
||||||
|
method
|
||||||
|
end
|
||||||
|
|
||||||
|
@@CLAZZ = { :names => [:name , :super_class_name , :instance_methods] , :types => [Virtual::Reference,Virtual::Reference,Virtual::Reference]}
|
||||||
|
def layout
|
||||||
|
@@CLAZZ
|
||||||
|
end
|
||||||
|
def mem_length
|
||||||
|
padded_words(3)
|
||||||
|
end
|
||||||
|
def to_s
|
||||||
|
inspect[0...300]
|
||||||
|
end
|
||||||
|
|
||||||
# ruby 2.1 list (just for reference, keep at bottom)
|
# ruby 2.1 list (just for reference, keep at bottom)
|
||||||
#:allocate, :new, :superclass
|
#:allocate, :new, :superclass
|
||||||
end
|
end
|
||||||
|
@ -13,7 +13,7 @@ module Virtual
|
|||||||
# keyword for it, like meta
|
# keyword for it, like meta
|
||||||
# In effect it is a very similar construct to def self.function(...)
|
# In effect it is a very similar construct to def self.function(...)
|
||||||
# So one could write def meta.function(...) and thus define on the meta-class
|
# So one could write def meta.function(...) and thus define on the meta-class
|
||||||
class MetaClass < Virtual::Object
|
class MetaClass < Object
|
||||||
# no name, nor nothing. as this is just the object really
|
# no name, nor nothing. as this is just the object really
|
||||||
|
|
||||||
def initialize(object)
|
def initialize(object)
|
@ -1,54 +0,0 @@
|
|||||||
require_relative "meta_class"
|
|
||||||
|
|
||||||
module Virtual
|
|
||||||
|
|
||||||
# class is mainly a list of methods with a name (for now)
|
|
||||||
# layout of object is seperated into Layout
|
|
||||||
class BootClass < Virtual::ObjectConstant
|
|
||||||
def initialize name , super_class_name = :Object
|
|
||||||
super()
|
|
||||||
# class methods
|
|
||||||
@instance_methods = []
|
|
||||||
@name = name.to_sym
|
|
||||||
@super_class_name = super_class_name.to_sym
|
|
||||||
@meta_class = Virtual::MetaClass.new(self)
|
|
||||||
end
|
|
||||||
attr_reader :name , :instance_methods , :meta_class , :context , :super_class_name
|
|
||||||
def add_instance_method method
|
|
||||||
raise "not a method #{method.class} #{method.inspect}" unless method.is_a? Virtual::CompiledMethod
|
|
||||||
raise "syserr " unless method.name.is_a? Symbol
|
|
||||||
@instance_methods << method
|
|
||||||
end
|
|
||||||
|
|
||||||
def get_instance_method fname
|
|
||||||
fname = fname.to_sym
|
|
||||||
@instance_methods.detect{ |fun| fun.name == fname }
|
|
||||||
end
|
|
||||||
|
|
||||||
# get the method and if not found, try superclasses. raise error if not found
|
|
||||||
def resolve_method m_name
|
|
||||||
method = get_instance_method(m_name)
|
|
||||||
unless method
|
|
||||||
unless( @name == :Object)
|
|
||||||
supr = BootSpace.space.get_or_create_class(@super_class_name)
|
|
||||||
method = supr.resolve_method(m_name)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
raise "Method not found #{m_name}, for #{@name}" unless method
|
|
||||||
method
|
|
||||||
end
|
|
||||||
|
|
||||||
@@CLAZZ = { :names => [:name , :super_class_name , :instance_methods] , :types => [Virtual::Reference,Virtual::Reference,Virtual::Reference]}
|
|
||||||
def layout
|
|
||||||
@@CLAZZ
|
|
||||||
end
|
|
||||||
def mem_length
|
|
||||||
padded_words(3)
|
|
||||||
end
|
|
||||||
def to_s
|
|
||||||
inspect[0...300]
|
|
||||||
end
|
|
||||||
|
|
||||||
end
|
|
||||||
|
|
||||||
end
|
|
@ -1,4 +1,3 @@
|
|||||||
require_relative "boot_class"
|
|
||||||
require "register/builtin/object"
|
require "register/builtin/object"
|
||||||
|
|
||||||
module Virtual
|
module Virtual
|
||||||
|
@ -1,10 +1,5 @@
|
|||||||
require_relative "type"
|
require_relative "type"
|
||||||
require "parfait/message"
|
require "parfait"
|
||||||
require "parfait/frame"
|
|
||||||
require "parfait/hash"
|
|
||||||
require "parfait/array"
|
|
||||||
require "parfait/string"
|
|
||||||
require "parfait/frame"
|
|
||||||
|
|
||||||
module Positioned
|
module Positioned
|
||||||
def position
|
def position
|
||||||
|
Loading…
Reference in New Issue
Block a user