fix boot to include blocks correctly

This commit is contained in:
Torsten Ruger 2018-07-27 10:48:45 +03:00
parent 4839e0d245
commit e1d5592c55
3 changed files with 19 additions and 4 deletions

View File

@ -133,15 +133,15 @@ module Parfait
# and all instance variable names. Really have to find a better way
def self.type_names
{BinaryCode: {next: :BinaryCode} ,
Block: {binary: :BinaryCode, next: :CallableMethod,
arguments_type: :Type , self_type: :Type, frame_type: :Type } ,
Block: {binary: :BinaryCode, next: :Block,
arguments_type: :Type , self_type: :Type, frame_type: :Type } ,
CacheEntry: {cached_type: :Type , cached_method: :CallableMethod } ,
Callable: {binary: :BinaryCode,next: :Callable ,
arguments_type: :Type , self_type: :Type, frame_type: :Type } ,
CallableMethod: {name: :Word, binary: :BinaryCode,
CallableMethod: {binary: :BinaryCode, next: :CallableMethod ,
arguments_type: :Type , self_type: :Type, frame_type: :Type ,
next: :CallableMethod} ,
name: :Word , blocks: :Block} ,
Class: {instance_methods: :List, instance_type: :Type,
name: :Word, super_class_name: :Word },
DataObject: {},

View File

@ -99,5 +99,12 @@ module Parfait
method = Parfait::CallableMethod.new( @obj , :other , @args , @frame)
assert @method != method
end
def test_create_block
@block = @method.create_block(@args , @frame)
assert_equal Block , @block.class
end
def test_has_block
assert_equal 7 , @method.get_type.variable_index( :blocks )
end
end
end

View File

@ -13,6 +13,14 @@ module Risc
end
alias :do_setup :setup
def yielder
"def yielder; yield ; end"
end
def block_main( main , extra = yielder)
in_Space("#{extra} ; def main(arg) ; #{main} ; end")
end
# check the given array of instructions is what the interpreter actually does
# possible second argument ignores the given amount, usually up until main
def check_chain( should , start_at = 0 )