move meta and boot class to parfait

just cosmetic, fixed requires but not code
This commit is contained in:
Torsten Ruger 2015-05-12 09:54:36 +03:00
parent b804354236
commit 73a6a5db39
6 changed files with 70 additions and 72 deletions

9
lib/parfait.rb Normal file
View 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"

View File

@ -1,6 +1,8 @@
# Class derives from and derives most of it's functionality (that you would associate with a class)
# 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
@ -8,8 +10,55 @@
# The Layout lists the names of the instance variables
# The class keeps a list of instance methods, these have a name and code
require_relative "meta_class"
module Parfait
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)
#:allocate, :new, :superclass
end

View File

@ -1,21 +1,21 @@
module Virtual
# TODO : rethink - possibly needs to be a module to be mixed into Object
#
# class that acts like a class, but is really the object
# described in the ruby language book as the eigenclass, what you get with
# class MyClass
# class << self <--- this is called the eigenclass, or metaclass, and really is just
# .... the class object but gives us the ability to use the
# described in the ruby language book as the eigenclass, what you get with
# class MyClass
# class << self <--- this is called the eigenclass, or metaclass, and really is just
# .... the class object but gives us the ability to use the
# syntax as if it were a class
# PS: can't say i fancy the << self syntax and am considerernig adding a
# PS: can't say i fancy the << self syntax and am considerernig adding a
# keyword for it, like meta
# 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
class MetaClass < Virtual::Object
class MetaClass < Object
# no name, nor nothing. as this is just the object really
def initialize(object)
super()
@functions = []
@ -42,7 +42,7 @@ module Virtual
end
# get the function and if not found, try superclasses. raise error if not found
def resolve_method name
def resolve_method name
fun = get_function name
# TODO THE BOOK says is class A derives from B , then the metaclass of A derives from the metaclass of B
# just get to it ! (and stop whimpering)
@ -50,7 +50,7 @@ module Virtual
fun
end
def to_s
def to_s
"#{inspect} on #{@me_self}, #{@functions.length} functions"
end
end

View File

@ -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

View File

@ -1,4 +1,3 @@
require_relative "boot_class"
require "register/builtin/object"
module Virtual

View File

@ -1,10 +1,5 @@
require_relative "type"
require "parfait/message"
require "parfait/frame"
require "parfait/hash"
require "parfait/array"
require "parfait/string"
require "parfait/frame"
require "parfait"
module Positioned
def position