move soml tests out, small cleanup
This commit is contained in:
parent
5ac14ddccc
commit
adca8b21c1
2
Gemfile
2
Gemfile
@ -1,7 +1,7 @@
|
||||
source "http://rubygems.org"
|
||||
|
||||
gem "salama" , :path => "."
|
||||
gem "ast" #, :github => "whitequark/ast"
|
||||
gem "ast" , :github => "whitequark/ast" , branch: :master
|
||||
|
||||
gem "rake"
|
||||
gem "rye"
|
||||
|
10
Gemfile.lock
10
Gemfile.lock
@ -18,6 +18,13 @@ GIT
|
||||
ast (~> 2.1.0)
|
||||
parslet (~> 1.7.1)
|
||||
|
||||
GIT
|
||||
remote: git://github.com/whitequark/ast.git
|
||||
revision: 3814fb102af82a30bf334005ebe17332744f9dad
|
||||
branch: master
|
||||
specs:
|
||||
ast (2.1.0)
|
||||
|
||||
PATH
|
||||
remote: .
|
||||
specs:
|
||||
@ -31,7 +38,6 @@ GEM
|
||||
specs:
|
||||
annoy (0.5.6)
|
||||
highline (>= 1.5.0)
|
||||
ast (2.1.0)
|
||||
blankslate (3.1.3)
|
||||
codeclimate-test-reporter (1.0.3)
|
||||
simplecov
|
||||
@ -108,7 +114,7 @@ PLATFORMS
|
||||
x64-mingw32
|
||||
|
||||
DEPENDENCIES
|
||||
ast
|
||||
ast!
|
||||
codeclimate-test-reporter
|
||||
guard
|
||||
guard-minitest
|
||||
|
@ -1,6 +1,6 @@
|
||||
module Register
|
||||
|
||||
# Booting is a complicated, so it is extracted into this file, even it has only one entry point
|
||||
# Booting is complicated, so it is extracted into this file, even it has only one entry point
|
||||
|
||||
class Machine
|
||||
|
||||
@ -87,8 +87,8 @@ module Register
|
||||
|
||||
# helper to create a Type, name is the parfait name, ie :Type
|
||||
def type_for( name , ivars )
|
||||
l = Parfait::Type.allocate.fake_init
|
||||
l.add_instance_variable :type , :Type
|
||||
l = Parfait::Type.allocate.compile_time_init
|
||||
l.add_instance_variable :type , name
|
||||
ivars.each {|n,t| l.add_instance_variable( n , t) }
|
||||
l
|
||||
end
|
||||
@ -97,7 +97,7 @@ module Register
|
||||
# meaning the lauouts have to be booted, @types filled
|
||||
# here we pass the actual (ruby) class
|
||||
def object_with_type(cl)
|
||||
o = cl.allocate.fake_init
|
||||
o = cl.allocate.compile_time_init
|
||||
name = cl.name.split("::").last.to_sym
|
||||
o.set_type @types[name]
|
||||
o
|
||||
|
@ -10,8 +10,8 @@
|
||||
# may be added to any object at run-time.
|
||||
|
||||
# An Object carries the data for the instance variables it has.
|
||||
# The type lists the names of the instance variables
|
||||
# The class keeps a list of instance methods, these have a name and code
|
||||
# The Type lists the names of the instance variables
|
||||
# The Class keeps a list of instance methods, these have a name and code
|
||||
|
||||
module Parfait
|
||||
class Class < Object
|
||||
|
@ -21,10 +21,11 @@ module Parfait
|
||||
# At compile time we fake memory by using a global array for pages
|
||||
def self.new *args
|
||||
object = self.allocate
|
||||
#HACK, but used to do the adapter in the init, bu that is too late now
|
||||
object.fake_init if object.respond_to?(:fake_init) # at compile, not run-time
|
||||
object.compile_time_init if object.respond_to?(:compile_time_init)
|
||||
|
||||
# have to grab the class, because we are in the ruby class not the parfait one
|
||||
cl = Space.object_space.get_class_by_name( self.name.split("::").last.to_sym)
|
||||
|
||||
# and have to set the type before we let the object do anything. otherwise boom
|
||||
object.set_type cl.instance_type
|
||||
|
||||
@ -35,7 +36,7 @@ module Parfait
|
||||
include Padding
|
||||
include Positioned
|
||||
|
||||
def fake_init
|
||||
def compile_time_init
|
||||
@memory = Array.new(16)
|
||||
@position = nil
|
||||
self # for chaining
|
||||
|
@ -6,7 +6,7 @@
|
||||
# The Type allows the mapping of names to index.
|
||||
|
||||
# The Type of an object describes the memory layout of the object. In a c analogy, it is the
|
||||
# information defined in a struct.
|
||||
# information defined in a struct.
|
||||
# The Type is a list of the names of instance variables, and their value types (int etc).
|
||||
#
|
||||
# Every object has a Type to describe it, so it's *first* instance variable is **always**
|
||||
@ -19,13 +19,19 @@
|
||||
# But Objects must also be able to carry methods themselves (ruby calls singleton_methods)
|
||||
# and those too are stored in the Type (both type and class include behaviour)
|
||||
|
||||
# In other words, the Type is a list of names and value types that describe
|
||||
# the values stored in an actual object.
|
||||
# The object is an List of values of length n and
|
||||
# the Type is an List of names and value tpyes of length n ,
|
||||
# plus class reference and methods reference
|
||||
# The object is an List of values of length n
|
||||
|
||||
# The Type is a list of n names and n types that describe the values stored in an actual object.
|
||||
|
||||
# Together they turn the object into a hash like structure
|
||||
|
||||
# For types to be a useful concept, they have to be unique and immutable. Any "change", like adding
|
||||
# a name/type pair, will result in a new instance.
|
||||
|
||||
# The Type class carries a hash of types of the systems, which is used to ensure that
|
||||
# there is only one instance of every type. Hash and equality are defined on type
|
||||
# for this to work.
|
||||
|
||||
module Parfait
|
||||
class Type < Object
|
||||
attribute :object_class
|
||||
|
@ -3,7 +3,7 @@ require_relative "../helper"
|
||||
class TestSpace < MiniTest::Test
|
||||
|
||||
def setup
|
||||
@machine = Register.machine
|
||||
@machine = Register.machine.boot
|
||||
end
|
||||
def classes
|
||||
[:Kernel,:Word,:List,:Message,:Frame,:Type,:Object,:Class,:Dictionary,:Method , :Integer]
|
||||
|
@ -1,5 +1,3 @@
|
||||
require_relative "soml/test_all"
|
||||
|
||||
require_relative "elf/test_all"
|
||||
|
||||
require_relative "register/test_all"
|
||||
|
Loading…
Reference in New Issue
Block a user