Get a basic MetaClass going

Does get created in new, but not in boot.
Also not yet used in compiling
This commit is contained in:
Torsten Ruger
2019-02-16 23:24:16 +02:00
parent 2fbea82039
commit 3db7707614
11 changed files with 175 additions and 10 deletions

View File

@ -0,0 +1,50 @@
require_relative "helper"
module Parfait
class TestMetaClass < ParfaitTest
def setup
super
@try = @space.create_class( :Try , :Object).meta_class
end
def test_type_forclass
assert_equal "Class(Space)" , @space.get_type.object_class.inspect
assert_equal :Space , @space.get_type.object_class.name
end
def test_new_superclass_name
assert_equal :Object , @try.clazz.super_class_name
end
def test_new_superclass
assert_equal "Class(Try)" , @try.clazz.inspect
assert_equal "MetaClass(Try)" , @try.inspect
end
def test_new_methods
assert_equal @try.method_names.class, @try.instance_methods.class
assert_equal @try.method_names.get_length , @try.instance_methods.get_length
end
def test_remove_nothere
assert !@try.remove_instance_method(:foo)
end
def test_resolve
assert_nil @try.resolve_method :foo
end
def test_remove_method
assert_equal false , @try.remove_instance_method( :foo)
end
def test_add_nil_method_raises
assert_raises{ @try.add_instance_method(nil)}
end
def test_add_instance_variable_changes_type
before = @space.get_class.instance_type
@space.get_class.add_instance_variable(:counter , :Integer)
assert before != @space.get_class.instance_type
end
def test_add_instance_variable_changes_type_hash
before = @space.get_class.instance_type.hash
@space.get_class.add_instance_variable(:counter , :Integer)
assert before != @space.get_class.instance_type.hash
end
end
end

View File

@ -6,7 +6,7 @@ module Parfait
def classes
[:BinaryCode,:Block,:CacheEntry,:Callable,:CallableMethod,:Class,
:DataObject,:Data4,:Data8,:Data16,:Dictionary,:Factory, :Integer,:FalseClass,
:List,:Message,:NamedList,:NilClass,:Object,:ReturnAddress,
:List,:Message, :MetaClass, :NamedList,:NilClass,:Object,:ReturnAddress,
:Space,:TrueClass,:Type,:VoolMethod,:Word]
end

View File

@ -41,7 +41,7 @@ module Risc
ret = main_ticks(68)
assert_equal FunctionReturn , ret.class
assert_equal :r1 , ret.register.symbol
assert_equal 22284 , @interpreter.get_register(ret.register)
assert_equal 24204 , @interpreter.get_register(ret.register)
end
end
end

View File

@ -54,7 +54,7 @@ module Risc
end
def test_pc1
@interpreter.tick
assert_equal 21688 , @interpreter.pc
assert_equal 23672 , @interpreter.pc
end
def test_tick2
@interpreter.tick
@ -68,7 +68,7 @@ module Risc
def test_pc2
@interpreter.tick
@interpreter.tick
assert_equal 21692 , @interpreter.pc
assert_equal 23676 , @interpreter.pc
end
def test_tick_14_jump
14.times {@interpreter.tick}

View File

@ -25,7 +25,7 @@ module Risc
assert_equal 0 , Position.get(@linker.cpu_init).at
end
def test_cpu_at
assert_equal "0x4f1c" , Position.get(@linker.cpu_init.first).to_s
assert_equal "0x569c" , Position.get(@linker.cpu_init.first).to_s
end
def test_cpu_label
assert_equal Position , Position.get(@linker.cpu_init.first).class

View File

@ -16,8 +16,12 @@ module VoolBlocks
begin
vool.to_mom(nil)
rescue => err
assert err.message.include?("Blocks")
assert err.message.include?("Blocks") , err.message
end
end
def test_assign_compiles
vool = Ruby::RubyCompiler.compile( as_class_method("val = 0") ).to_vool
assert_equal Mom::MomCompiler , vool.to_mom(nil).class
end
end
end