load space twice in init , messagesetup overwrites first

lots of interpreter test changes, brittle, must factor __initi out
This commit is contained in:
Torsten Ruger 2018-04-02 23:25:52 +03:00
parent 576ae9261d
commit c304ad67c6
15 changed files with 197 additions and 195 deletions

View File

@ -46,16 +46,15 @@ module Risc
def __init__ context def __init__ context
compiler = Risc::MethodCompiler.create_method(:Object,:__init__ , compiler = Risc::MethodCompiler.create_method(:Object,:__init__ ,
Parfait::NamedList.type_for({}) , Parfait::NamedList.type_for({})) Parfait::NamedList.type_for({}) , Parfait::NamedList.type_for({}))
space = Parfait.object_space
space_reg = compiler.use_reg(:Space) #Set up the Space as self upon init space_reg = compiler.use_reg(:Space) #Set up the Space as self upon init
compiler.add_load_constant("__init__ load Space", space , space_reg) compiler.add_load_constant("__init__ load Space", Parfait.object_space , space_reg)
message_ind = Risc.resolve_to_index( :space , :first_message ) message_ind = Risc.resolve_to_index( :space , :first_message )
#load the first_message (instance of space) #load the first_message (instance of space)
compiler.add_slot_to_reg( "__init__ load 1st message" , space_reg , message_ind , :message) compiler.add_slot_to_reg( "__init__ load 1st message" , space_reg , message_ind , :message)
compiler.add_mom( Mom::MessageSetup.new(compiler.method)) compiler.add_mom( Mom::MessageSetup.new(compiler.method))
# but use it's next message, so main can return normally # but use it's next message, so main can return normally
compiler.add_slot_to_reg( "__init__ load 2nd message" , :message , :next_message , :message) compiler.add_slot_to_reg( "__init__ load 2nd message" , :message , :next_message , :message)
compiler.add_load_constant("__init__ load Space", Parfait.object_space , space_reg)
compiler.add_reg_to_slot( "__init__ store Space in message", space_reg , :message , :receiver) compiler.add_reg_to_slot( "__init__ store Space in message", space_reg , :message , :receiver)
#fixme: should add arg type here, as done in call_site (which this sort of is) #fixme: should add arg type here, as done in call_site (which this sort of is)
exit_label = Risc.label("_exit_label for __init__" , "#{compiler.type.object_class.name}.#{compiler.method.name}" ) exit_label = Risc.label("_exit_label for __init__" , "#{compiler.type.object_class.name}.#{compiler.method.name}" )

View File

@ -15,35 +15,35 @@ module Risc
SlotToReg, SlotToReg, RegToSlot, LoadConstant, SlotToReg, SlotToReg, SlotToReg, RegToSlot, LoadConstant, SlotToReg,
SlotToReg, SlotToReg, SlotToReg, RegToSlot, LoadConstant, SlotToReg, SlotToReg, SlotToReg, RegToSlot, LoadConstant,
SlotToReg, SlotToReg, SlotToReg, SlotToReg, RegToSlot, SlotToReg, SlotToReg, SlotToReg, SlotToReg, RegToSlot,
SlotToReg, RegToSlot, LoadConstant, RegToSlot, FunctionCall, SlotToReg, LoadConstant, RegToSlot, LoadConstant, RegToSlot,
Label, LoadConstant, SlotToReg, RegToSlot, SlotToReg, FunctionCall, Label, LoadConstant, SlotToReg, RegToSlot,
SlotToReg, RegToSlot, SlotToReg, SlotToReg, RegToSlot, SlotToReg, SlotToReg, RegToSlot, SlotToReg, SlotToReg,
SlotToReg, SlotToReg, FunctionReturn, Transfer, Syscall, RegToSlot, SlotToReg, SlotToReg, FunctionReturn, Transfer,
NilClass] Syscall, NilClass]
assert_equal 15 , get_return.value assert_equal 15 , get_return.value
end end
def test_call_main def test_call_main
call_ins = ticks(25) call_ins = ticks(26)
assert_equal FunctionCall , call_ins.class assert_equal FunctionCall , call_ins.class
assert :main , call_ins.method.name assert :main , call_ins.method.name
end end
def test_load_15 def test_load_15
load_ins = ticks 27 load_ins = ticks 28
assert_equal LoadConstant , load_ins.class assert_equal LoadConstant , load_ins.class
assert_equal Parfait::Integer , @interpreter.get_register(load_ins.register).class assert_equal Parfait::Integer , @interpreter.get_register(load_ins.register).class
assert_equal 15 , @interpreter.get_register(load_ins.register).value assert_equal 15 , @interpreter.get_register(load_ins.register).value
end end
def test_transfer def test_transfer
transfer = ticks(39) transfer = ticks(40)
assert_equal Transfer , transfer.class assert_equal Transfer , transfer.class
end end
def test_sys def test_sys
sys = ticks(40) sys = ticks(41)
assert_equal Syscall , sys.class assert_equal Syscall , sys.class
end end
def test_return def test_return
ret = ticks(38) ret = ticks(39)
assert_equal FunctionReturn , ret.class assert_equal FunctionReturn , ret.class
link = @interpreter.get_register( ret.register ) link = @interpreter.get_register( ret.register )
assert_equal Label , link.class assert_equal Label , link.class

View File

@ -15,47 +15,47 @@ module Risc
SlotToReg, SlotToReg, RegToSlot, LoadConstant, SlotToReg, SlotToReg, SlotToReg, RegToSlot, LoadConstant, SlotToReg,
SlotToReg, SlotToReg, SlotToReg, RegToSlot, LoadConstant, SlotToReg, SlotToReg, SlotToReg, RegToSlot, LoadConstant,
SlotToReg, SlotToReg, SlotToReg, SlotToReg, RegToSlot, SlotToReg, SlotToReg, SlotToReg, SlotToReg, RegToSlot,
SlotToReg, RegToSlot, LoadConstant, RegToSlot, FunctionCall, SlotToReg, LoadConstant, RegToSlot, LoadConstant, RegToSlot,
Label, LoadConstant, SlotToReg, SlotToReg, RegToSlot, FunctionCall, Label, LoadConstant, SlotToReg, SlotToReg,
LoadConstant, SlotToReg, SlotToReg, SlotToReg, SlotToReg,
RegToSlot, LoadConstant, SlotToReg, SlotToReg, SlotToReg, RegToSlot, LoadConstant, SlotToReg, SlotToReg, SlotToReg,
SlotToReg, RegToSlot, LoadConstant, SlotToReg, RegToSlot, SlotToReg, RegToSlot, LoadConstant, SlotToReg, SlotToReg,
LoadConstant, SlotToReg, RegToSlot, SlotToReg, LoadConstant, SlotToReg, SlotToReg, RegToSlot, LoadConstant, SlotToReg,
FunctionCall, Label, SlotToReg, SlotToReg, SlotToReg, RegToSlot, LoadConstant, SlotToReg, RegToSlot, SlotToReg,
SlotToReg, SlotToReg, SlotToReg, LoadData, OperatorInstruction, LoadConstant, FunctionCall, Label, SlotToReg, SlotToReg,
LoadData, OperatorInstruction, OperatorInstruction, LoadData, Transfer, SlotToReg, SlotToReg, SlotToReg, SlotToReg, LoadData,
OperatorInstruction, LoadData, OperatorInstruction, OperatorInstruction, LoadData,
Transfer, OperatorInstruction, OperatorInstruction, LoadData, Transfer,
OperatorInstruction, OperatorInstruction, LoadData, Transfer, OperatorInstruction, OperatorInstruction, OperatorInstruction, LoadData, Transfer, OperatorInstruction,
OperatorInstruction, LoadData, Transfer, OperatorInstruction, OperatorInstruction, OperatorInstruction, LoadData, OperatorInstruction, LoadData, Transfer,
LoadData, OperatorInstruction, LoadData, Transfer, OperatorInstruction, OperatorInstruction, OperatorInstruction, Transfer, LoadData, OperatorInstruction,
OperatorInstruction, Transfer, LoadData, OperatorInstruction, LoadData, LoadData, OperatorInstruction, OperatorInstruction, LoadConstant, SlotToReg,
OperatorInstruction, OperatorInstruction, LoadConstant, SlotToReg, SlotToReg, SlotToReg, RegToSlot, RegToSlot, RegToSlot, SlotToReg,
RegToSlot, RegToSlot, RegToSlot, SlotToReg, SlotToReg, SlotToReg, RegToSlot, SlotToReg, SlotToReg, FunctionReturn,
RegToSlot, SlotToReg, SlotToReg, FunctionReturn, SlotToReg,
SlotToReg, RegToSlot, SlotToReg, SlotToReg, RegToSlot,
SlotToReg, SlotToReg, RegToSlot, SlotToReg, SlotToReg, SlotToReg, SlotToReg, RegToSlot, SlotToReg, SlotToReg,
FunctionReturn, Transfer, Syscall, NilClass] RegToSlot, SlotToReg, SlotToReg, RegToSlot, SlotToReg,
SlotToReg, FunctionReturn, Transfer, Syscall, NilClass]
assert_equal Parfait::Integer , get_return.class assert_equal Parfait::Integer , get_return.class
assert_equal 2 , get_return.value assert_equal 2 , get_return.value
end end
def test_call_main def test_call_main
call_ins = ticks(25) call_ins = ticks(26)
assert_equal FunctionCall , call_ins.class assert_equal FunctionCall , call_ins.class
assert :main , call_ins.method.name assert :main , call_ins.method.name
end end
def test_load_25 def test_load_25
load_ins = ticks 43 load_ins = ticks 44
assert_equal LoadConstant , load_ins.class assert_equal LoadConstant , load_ins.class
assert_equal 25 , @interpreter.get_register(load_ins.register).value assert_equal 25 , @interpreter.get_register(load_ins.register).value
end end
def test_return def test_return
ret = ticks(99) ret = ticks(100)
assert_equal FunctionReturn , ret.class assert_equal FunctionReturn , ret.class
link = @interpreter.get_register( ret.register ) link = @interpreter.get_register( ret.register )
assert_equal Label , link.class assert_equal Label , link.class
end end
def test_sys def test_sys
sys = ticks(113) sys = ticks(114)
assert_equal Syscall , sys.class assert_equal Syscall , sys.class
assert_equal :exit , sys.name assert_equal :exit , sys.name
end end

View File

@ -15,33 +15,35 @@ module Risc
SlotToReg, SlotToReg, RegToSlot, LoadConstant, SlotToReg, SlotToReg, SlotToReg, RegToSlot, LoadConstant, SlotToReg,
SlotToReg, SlotToReg, SlotToReg, RegToSlot, LoadConstant, SlotToReg, SlotToReg, SlotToReg, RegToSlot, LoadConstant,
SlotToReg, SlotToReg, SlotToReg, SlotToReg, RegToSlot, SlotToReg, SlotToReg, SlotToReg, SlotToReg, RegToSlot,
SlotToReg, RegToSlot, LoadConstant, RegToSlot, FunctionCall, SlotToReg, LoadConstant, RegToSlot, LoadConstant, RegToSlot,
Label, LoadConstant, SlotToReg, RegToSlot, LoadConstant, FunctionCall, Label, LoadConstant, SlotToReg, RegToSlot,
SlotToReg, SlotToReg, SlotToReg, OperatorInstruction, IsZero, LoadConstant, SlotToReg, SlotToReg, SlotToReg, OperatorInstruction,
SlotToReg, SlotToReg, LoadConstant, RegToSlot, LoadConstant, IsZero, SlotToReg, SlotToReg, LoadConstant, RegToSlot,
SlotToReg, SlotToReg, RegToSlot, LoadConstant, SlotToReg, LoadConstant, SlotToReg, SlotToReg, RegToSlot, LoadConstant,
SlotToReg, SlotToReg, SlotToReg, RegToSlot, LoadConstant,
SlotToReg, SlotToReg, SlotToReg, SlotToReg, RegToSlot, SlotToReg, SlotToReg, SlotToReg, SlotToReg, RegToSlot,
LoadConstant, SlotToReg, RegToSlot, SlotToReg, SlotToReg, LoadConstant, SlotToReg, SlotToReg, SlotToReg, SlotToReg,
SlotToReg, RegToSlot, LoadConstant, SlotToReg, RegToSlot, RegToSlot, LoadConstant, SlotToReg, RegToSlot, SlotToReg,
SlotToReg, LoadConstant, FunctionCall, Label, SlotToReg, SlotToReg, SlotToReg, RegToSlot, LoadConstant, SlotToReg,
SlotToReg, SlotToReg, SlotToReg, Label, LoadConstant, RegToSlot, SlotToReg, LoadConstant, FunctionCall, Label,
SlotToReg, OperatorInstruction, IsZero, Label, Transfer, SlotToReg, SlotToReg, SlotToReg, SlotToReg, Label,
Syscall, NilClass] LoadConstant, SlotToReg, OperatorInstruction, IsZero, SlotToReg,
OperatorInstruction, IsNotZero, Label, SlotToReg, Branch,
Label, LoadConstant, SlotToReg, OperatorInstruction, IsZero,
Label, Transfer, Syscall, NilClass]
#assert_equal 1 , get_return #assert_equal 1 , get_return
end end
def test_call_main def est_call_main
call_ins = ticks(25) call_ins = ticks(25)
assert_equal FunctionCall , call_ins.class assert_equal FunctionCall , call_ins.class
assert_equal :main , call_ins.method.name assert_equal :main , call_ins.method.name
end end
def test_call_resolve def est_call_resolve
call_ins = ticks(68) call_ins = ticks(68)
assert_equal FunctionCall , call_ins.class assert_equal FunctionCall , call_ins.class
assert_equal :resolve_method , call_ins.method.name assert_equal :resolve_method , call_ins.method.name
end end
def test_label def est_label
call_ins = ticks(69) call_ins = ticks(69)
assert_equal Label , call_ins.class assert_equal Label , call_ins.class
assert_equal "Word_Type.resolve_method" , call_ins.name assert_equal "Word_Type.resolve_method" , call_ins.name

View File

@ -21,7 +21,7 @@ module Risc
def test_state_change def test_state_change
@interpreter.register_event :state_changed , self @interpreter.register_event :state_changed , self
ticks 88 ticks 89
assert @state_events[:state_changed] assert @state_events[:state_changed]
assert_equal 2 , @state_events[:state_changed].length assert_equal 2 , @state_events[:state_changed].length
assert_equal :running, @state_events[:state_changed][0] assert_equal :running, @state_events[:state_changed][0]
@ -30,8 +30,8 @@ module Risc
def test_instruction_events def test_instruction_events
@interpreter.register_event :instruction_changed , self @interpreter.register_event :instruction_changed , self
ticks 88 ticks 89
assert_equal 88 , @instruction_events.length assert_equal 89 , @instruction_events.length
@interpreter.unregister_event :instruction_changed , self @interpreter.unregister_event :instruction_changed , self
end end
@ -41,20 +41,20 @@ module Risc
SlotToReg, SlotToReg, RegToSlot, LoadConstant, SlotToReg, SlotToReg, SlotToReg, RegToSlot, LoadConstant, SlotToReg,
SlotToReg, SlotToReg, SlotToReg, RegToSlot, LoadConstant, SlotToReg, SlotToReg, SlotToReg, RegToSlot, LoadConstant,
SlotToReg, SlotToReg, SlotToReg, SlotToReg, RegToSlot, SlotToReg, SlotToReg, SlotToReg, SlotToReg, RegToSlot,
SlotToReg, RegToSlot, LoadConstant, RegToSlot, FunctionCall, SlotToReg, LoadConstant, RegToSlot, LoadConstant, RegToSlot,
Label, LoadConstant, SlotToReg, SlotToReg, RegToSlot, FunctionCall, Label, LoadConstant, SlotToReg, SlotToReg,
LoadConstant, SlotToReg, SlotToReg, SlotToReg, SlotToReg,
RegToSlot, LoadConstant, SlotToReg, SlotToReg, SlotToReg, RegToSlot, LoadConstant, SlotToReg, SlotToReg, SlotToReg,
SlotToReg, RegToSlot, LoadConstant, SlotToReg, RegToSlot, SlotToReg, RegToSlot, LoadConstant, SlotToReg, SlotToReg,
LoadConstant, SlotToReg, SlotToReg, RegToSlot, LoadConstant, SlotToReg, SlotToReg, RegToSlot, LoadConstant, SlotToReg,
SlotToReg, RegToSlot, SlotToReg, LoadConstant, FunctionCall, RegToSlot, LoadConstant, SlotToReg, SlotToReg, RegToSlot,
Label, SlotToReg, SlotToReg, SlotToReg, SlotToReg, LoadConstant, SlotToReg, RegToSlot, SlotToReg, LoadConstant,
SlotToReg, OperatorInstruction, LoadConstant, SlotToReg, SlotToReg, FunctionCall, Label, SlotToReg, SlotToReg, SlotToReg,
RegToSlot, RegToSlot, RegToSlot, SlotToReg, SlotToReg, SlotToReg, SlotToReg, OperatorInstruction, LoadConstant, SlotToReg,
RegToSlot, SlotToReg, SlotToReg, FunctionReturn, SlotToReg, SlotToReg, RegToSlot, RegToSlot, RegToSlot, SlotToReg,
SlotToReg, RegToSlot, SlotToReg, SlotToReg, RegToSlot, SlotToReg, RegToSlot, SlotToReg, SlotToReg, FunctionReturn,
SlotToReg, SlotToReg, RegToSlot, SlotToReg, SlotToReg, SlotToReg, SlotToReg, RegToSlot, SlotToReg, SlotToReg,
FunctionReturn, Transfer, Syscall, NilClass] RegToSlot, SlotToReg, SlotToReg, RegToSlot, SlotToReg,
SlotToReg, FunctionReturn, Transfer, Syscall, NilClass]
assert_equal Parfait::Integer , get_return.class assert_equal Parfait::Integer , get_return.class
assert_equal 12 , get_return.value assert_equal 12 , get_return.value
end end

View File

@ -14,30 +14,30 @@ module Risc
SlotToReg, SlotToReg, RegToSlot, LoadConstant, SlotToReg, SlotToReg, SlotToReg, RegToSlot, LoadConstant, SlotToReg,
SlotToReg, SlotToReg, SlotToReg, RegToSlot, LoadConstant, SlotToReg, SlotToReg, SlotToReg, RegToSlot, LoadConstant,
SlotToReg, SlotToReg, SlotToReg, SlotToReg, RegToSlot, SlotToReg, SlotToReg, SlotToReg, SlotToReg, RegToSlot,
SlotToReg, RegToSlot, LoadConstant, RegToSlot, FunctionCall, SlotToReg, LoadConstant, RegToSlot, LoadConstant, RegToSlot,
Label, LoadConstant, SlotToReg, SlotToReg, RegToSlot, FunctionCall, Label, LoadConstant, SlotToReg, SlotToReg,
LoadConstant, SlotToReg, SlotToReg, SlotToReg, SlotToReg,
RegToSlot, LoadConstant, SlotToReg, SlotToReg, SlotToReg, RegToSlot, LoadConstant, SlotToReg, SlotToReg, SlotToReg,
SlotToReg, RegToSlot, LoadConstant, SlotToReg, RegToSlot, SlotToReg, RegToSlot, LoadConstant, SlotToReg, SlotToReg,
LoadConstant, SlotToReg, SlotToReg, RegToSlot, LoadConstant, SlotToReg, SlotToReg, RegToSlot, LoadConstant, SlotToReg,
SlotToReg, RegToSlot, SlotToReg, LoadConstant, FunctionCall, RegToSlot, LoadConstant, SlotToReg, SlotToReg, RegToSlot,
Label, SlotToReg, SlotToReg, SlotToReg, SlotToReg, LoadConstant, SlotToReg, RegToSlot, SlotToReg, LoadConstant,
ByteToReg, LoadConstant, SlotToReg, SlotToReg, RegToSlot, FunctionCall, Label, SlotToReg, SlotToReg, SlotToReg,
RegToSlot, RegToSlot, SlotToReg, SlotToReg, RegToSlot, SlotToReg, ByteToReg, LoadConstant, SlotToReg, SlotToReg,
SlotToReg, SlotToReg, FunctionReturn, SlotToReg, SlotToReg, RegToSlot, RegToSlot, RegToSlot, SlotToReg, SlotToReg,
RegToSlot, SlotToReg, SlotToReg, RegToSlot, SlotToReg, RegToSlot, SlotToReg, SlotToReg, FunctionReturn, SlotToReg,
SlotToReg, RegToSlot, SlotToReg, SlotToReg, FunctionReturn, SlotToReg, RegToSlot, SlotToReg, SlotToReg, RegToSlot,
Transfer, Syscall, NilClass] SlotToReg, SlotToReg, RegToSlot, SlotToReg, SlotToReg,
FunctionReturn, Transfer, Syscall, NilClass]
assert_equal Parfait::Integer , get_return.class assert_equal Parfait::Integer , get_return.class
assert_equal "H".ord , get_return.value assert_equal "H".ord , get_return.value
end end
def test_exit def test_exit
done = ticks(87) done = ticks(88)
assert_equal Syscall , done.class assert_equal Syscall , done.class
end end
def test_byte_to_reg def test_byte_to_reg
done = ticks(61) done = ticks(62)
assert_equal ByteToReg , done.class assert_equal ByteToReg , done.class
assert_equal "H".ord , @interpreter.get_register(done.register) assert_equal "H".ord , @interpreter.get_register(done.register)
end end

View File

@ -15,31 +15,31 @@ module Risc
SlotToReg, SlotToReg, RegToSlot, LoadConstant, SlotToReg, SlotToReg, SlotToReg, RegToSlot, LoadConstant, SlotToReg,
SlotToReg, SlotToReg, SlotToReg, RegToSlot, LoadConstant, SlotToReg, SlotToReg, SlotToReg, RegToSlot, LoadConstant,
SlotToReg, SlotToReg, SlotToReg, SlotToReg, RegToSlot, SlotToReg, SlotToReg, SlotToReg, SlotToReg, RegToSlot,
SlotToReg, RegToSlot, LoadConstant, RegToSlot, FunctionCall, SlotToReg, LoadConstant, RegToSlot, LoadConstant, RegToSlot,
Label, LoadConstant, SlotToReg, SlotToReg, RegToSlot, FunctionCall, Label, LoadConstant, SlotToReg, SlotToReg,
LoadConstant, SlotToReg, SlotToReg, SlotToReg, SlotToReg,
RegToSlot, LoadConstant, SlotToReg, SlotToReg, SlotToReg, RegToSlot, LoadConstant, SlotToReg, SlotToReg, SlotToReg,
SlotToReg, RegToSlot, LoadConstant, SlotToReg, RegToSlot, SlotToReg, RegToSlot, LoadConstant, SlotToReg, SlotToReg,
LoadConstant, SlotToReg, SlotToReg, RegToSlot, LoadConstant, SlotToReg, SlotToReg, RegToSlot, LoadConstant, SlotToReg,
SlotToReg, RegToSlot, SlotToReg, LoadConstant, FunctionCall, RegToSlot, LoadConstant, SlotToReg, SlotToReg, RegToSlot,
Label, SlotToReg, SlotToReg, SlotToReg, SlotToReg, LoadConstant, SlotToReg, RegToSlot, SlotToReg, LoadConstant,
SlotToReg, OperatorInstruction, LoadConstant, SlotToReg, SlotToReg, FunctionCall, Label, SlotToReg, SlotToReg, SlotToReg,
RegToSlot, RegToSlot, RegToSlot, SlotToReg, SlotToReg, SlotToReg, SlotToReg, OperatorInstruction, LoadConstant, SlotToReg,
RegToSlot, SlotToReg, SlotToReg, FunctionReturn, SlotToReg, SlotToReg, RegToSlot, RegToSlot, RegToSlot, SlotToReg,
SlotToReg, RegToSlot, SlotToReg, SlotToReg, RegToSlot, SlotToReg, RegToSlot, SlotToReg, SlotToReg, FunctionReturn,
SlotToReg, SlotToReg, RegToSlot, SlotToReg, SlotToReg, SlotToReg, SlotToReg, RegToSlot, SlotToReg, SlotToReg,
FunctionReturn, Transfer, Syscall, NilClass] RegToSlot, SlotToReg, SlotToReg, RegToSlot, SlotToReg,
SlotToReg, FunctionReturn, Transfer, Syscall, NilClass]
assert_equal Parfait::Integer , get_return.class assert_equal Parfait::Integer , get_return.class
assert_equal 1 , get_return.value assert_equal 1 , get_return.value
end end
def test_load_5 def test_load_5
lod = ticks( 46 ) lod = ticks( 47 )
assert_equal LoadConstant , lod.class assert_equal LoadConstant , lod.class
assert_equal Parfait::Integer , lod.constant.class assert_equal Parfait::Integer , lod.constant.class
assert_equal 5 , lod.constant.value assert_equal 5 , lod.constant.value
end end
def test_op def test_op
op = ticks(62) op = ticks(63)
assert_equal OperatorInstruction , op.class assert_equal OperatorInstruction , op.class
assert_equal :r1 , op.left.symbol assert_equal :r1 , op.left.symbol
assert_equal :r2 , op.right.symbol assert_equal :r2 , op.right.symbol
@ -47,7 +47,7 @@ module Risc
assert_equal 1 , @interpreter.get_register(:r1) assert_equal 1 , @interpreter.get_register(:r1)
end end
def test_sys def test_sys
sys = ticks(88) sys = ticks(89)
assert_equal Syscall , sys.class assert_equal Syscall , sys.class
assert_equal :exit , sys.name assert_equal :exit , sys.name
end end

View File

@ -15,30 +15,30 @@ module Risc
SlotToReg, SlotToReg, RegToSlot, LoadConstant, SlotToReg, SlotToReg, SlotToReg, RegToSlot, LoadConstant, SlotToReg,
SlotToReg, SlotToReg, SlotToReg, RegToSlot, LoadConstant, SlotToReg, SlotToReg, SlotToReg, RegToSlot, LoadConstant,
SlotToReg, SlotToReg, SlotToReg, SlotToReg, RegToSlot, SlotToReg, SlotToReg, SlotToReg, SlotToReg, RegToSlot,
SlotToReg, RegToSlot, LoadConstant, RegToSlot, FunctionCall, SlotToReg, LoadConstant, RegToSlot, LoadConstant, RegToSlot,
Label, LoadConstant, SlotToReg, SlotToReg, RegToSlot, FunctionCall, Label, LoadConstant, SlotToReg, SlotToReg,
LoadConstant, SlotToReg, SlotToReg, SlotToReg, SlotToReg,
RegToSlot, LoadConstant, SlotToReg, SlotToReg, SlotToReg, RegToSlot, LoadConstant, SlotToReg, SlotToReg, SlotToReg,
SlotToReg, RegToSlot, LoadConstant, SlotToReg, RegToSlot, SlotToReg, RegToSlot, LoadConstant, SlotToReg, SlotToReg,
LoadConstant, SlotToReg, RegToSlot, SlotToReg, LoadConstant, SlotToReg, SlotToReg, RegToSlot, LoadConstant, SlotToReg,
FunctionCall, Label, SlotToReg, SlotToReg, LoadData, RegToSlot, LoadConstant, SlotToReg, RegToSlot, SlotToReg,
OperatorInstruction, LoadConstant, SlotToReg, SlotToReg, RegToSlot, LoadConstant, FunctionCall, Label, SlotToReg, SlotToReg,
RegToSlot, RegToSlot, SlotToReg, SlotToReg, RegToSlot, LoadData, OperatorInstruction, LoadConstant, SlotToReg, SlotToReg,
SlotToReg, SlotToReg, FunctionReturn, SlotToReg, SlotToReg, RegToSlot, RegToSlot, RegToSlot, SlotToReg, SlotToReg,
RegToSlot, SlotToReg, SlotToReg, RegToSlot, SlotToReg, RegToSlot, SlotToReg, SlotToReg, FunctionReturn, SlotToReg,
SlotToReg, RegToSlot, SlotToReg, SlotToReg, FunctionReturn, SlotToReg, RegToSlot, SlotToReg, SlotToReg, RegToSlot,
Transfer, Syscall, NilClass] SlotToReg, SlotToReg, RegToSlot, SlotToReg, SlotToReg,
FunctionReturn, Transfer, Syscall, NilClass]
assert_equal Parfait::Integer , get_return.class assert_equal Parfait::Integer , get_return.class
assert_equal 2 , get_return.value assert_equal 2 , get_return.value
end end
def test_load def test_load
lod = ticks(43) lod = ticks(44)
assert_equal LoadConstant , lod.class assert_equal LoadConstant , lod.class
assert_equal 9 , lod.constant.value assert_equal 9 , lod.constant.value
end end
def test_fix # reduce self to fix def test_fix # reduce self to fix
sl = ticks(54) sl = ticks(55)
assert_equal SlotToReg , sl.class assert_equal SlotToReg , sl.class
assert_equal :r1 , sl.array.symbol assert_equal :r1 , sl.array.symbol
assert_equal 3 , sl.index assert_equal 3 , sl.index
@ -47,7 +47,7 @@ module Risc
end end
def test_sys def test_sys
sys = ticks(82) sys = ticks(83)
assert_equal Syscall , sys.class assert_equal Syscall , sys.class
assert_equal :exit , sys.name assert_equal :exit , sys.name
end end

View File

@ -15,25 +15,25 @@ module Risc
SlotToReg, SlotToReg, RegToSlot, LoadConstant, SlotToReg, SlotToReg, SlotToReg, RegToSlot, LoadConstant, SlotToReg,
SlotToReg, SlotToReg, SlotToReg, RegToSlot, LoadConstant, SlotToReg, SlotToReg, SlotToReg, RegToSlot, LoadConstant,
SlotToReg, SlotToReg, SlotToReg, SlotToReg, RegToSlot, SlotToReg, SlotToReg, SlotToReg, SlotToReg, RegToSlot,
SlotToReg, RegToSlot, LoadConstant, RegToSlot, FunctionCall, SlotToReg, LoadConstant, RegToSlot, LoadConstant, RegToSlot,
Label, LoadConstant, SlotToReg, SlotToReg, RegToSlot, FunctionCall, Label, LoadConstant, SlotToReg, SlotToReg,
LoadConstant, SlotToReg, SlotToReg, SlotToReg, SlotToReg,
RegToSlot, LoadConstant, SlotToReg, SlotToReg, SlotToReg, RegToSlot, LoadConstant, SlotToReg, SlotToReg, SlotToReg,
SlotToReg, RegToSlot, LoadConstant, SlotToReg, RegToSlot, SlotToReg, RegToSlot, LoadConstant, SlotToReg, SlotToReg,
LoadConstant, SlotToReg, SlotToReg, RegToSlot, LoadConstant, SlotToReg, SlotToReg, RegToSlot, LoadConstant, SlotToReg,
SlotToReg, RegToSlot, SlotToReg, LoadConstant, FunctionCall, RegToSlot, LoadConstant, SlotToReg, SlotToReg, RegToSlot,
Label, SlotToReg, SlotToReg, SlotToReg, SlotToReg, LoadConstant, SlotToReg, RegToSlot, SlotToReg, LoadConstant,
SlotToReg, OperatorInstruction, LoadConstant, SlotToReg, SlotToReg, FunctionCall, Label, SlotToReg, SlotToReg, SlotToReg,
RegToSlot, RegToSlot, RegToSlot, SlotToReg, SlotToReg, SlotToReg, SlotToReg, OperatorInstruction, LoadConstant, SlotToReg,
RegToSlot, SlotToReg, SlotToReg, FunctionReturn, SlotToReg, SlotToReg, RegToSlot, RegToSlot, RegToSlot, SlotToReg,
SlotToReg, RegToSlot, SlotToReg, SlotToReg, RegToSlot, SlotToReg, RegToSlot, SlotToReg, SlotToReg, FunctionReturn,
SlotToReg, SlotToReg, RegToSlot, SlotToReg, SlotToReg, SlotToReg, SlotToReg, RegToSlot, SlotToReg, SlotToReg,
FunctionReturn, Transfer, Syscall, NilClass] RegToSlot, SlotToReg, SlotToReg, RegToSlot, SlotToReg,
SlotToReg, FunctionReturn, Transfer, Syscall, NilClass]
assert_equal Parfait::Integer , get_return.class assert_equal Parfait::Integer , get_return.class
assert_equal 0 , get_return.value assert_equal 0 , get_return.value
end end
def test_op def test_op
op = ticks(62) op = ticks(63)
assert_equal OperatorInstruction , op.class assert_equal OperatorInstruction , op.class
assert_equal :r1 , op.left.symbol assert_equal :r1 , op.left.symbol
assert_equal :r2 , op.right.symbol assert_equal :r2 , op.right.symbol
@ -41,7 +41,7 @@ module Risc
assert_equal 0 , @interpreter.get_register(:r1) assert_equal 0 , @interpreter.get_register(:r1)
end end
def test_overflow def test_overflow
ticks( 62 ) ticks( 63 )
assert @interpreter.flags[:overflow] assert @interpreter.flags[:overflow]
end end
def test_zero def test_zero

View File

@ -15,59 +15,59 @@ module Risc
SlotToReg, SlotToReg, RegToSlot, LoadConstant, SlotToReg, SlotToReg, SlotToReg, RegToSlot, LoadConstant, SlotToReg,
SlotToReg, SlotToReg, SlotToReg, RegToSlot, LoadConstant, SlotToReg, SlotToReg, SlotToReg, RegToSlot, LoadConstant,
SlotToReg, SlotToReg, SlotToReg, SlotToReg, RegToSlot, SlotToReg, SlotToReg, SlotToReg, SlotToReg, RegToSlot,
SlotToReg, RegToSlot, LoadConstant, RegToSlot, FunctionCall, SlotToReg, LoadConstant, RegToSlot, LoadConstant, RegToSlot,
Label, LoadConstant, SlotToReg, SlotToReg, RegToSlot, FunctionCall, Label, LoadConstant, SlotToReg, SlotToReg,
LoadConstant, SlotToReg, SlotToReg, SlotToReg, SlotToReg,
RegToSlot, LoadConstant, SlotToReg, SlotToReg, SlotToReg, RegToSlot, LoadConstant, SlotToReg, SlotToReg, SlotToReg,
SlotToReg, RegToSlot, LoadConstant, SlotToReg, RegToSlot, SlotToReg, RegToSlot, LoadConstant, SlotToReg, SlotToReg,
LoadConstant, SlotToReg, SlotToReg, RegToSlot, LoadConstant, SlotToReg, SlotToReg, RegToSlot, LoadConstant, SlotToReg,
SlotToReg, RegToSlot, SlotToReg, LoadConstant, FunctionCall, RegToSlot, LoadConstant, SlotToReg, SlotToReg, RegToSlot,
Label, SlotToReg, SlotToReg, SlotToReg, SlotToReg, LoadConstant, SlotToReg, RegToSlot, SlotToReg, LoadConstant,
SlotToReg, OperatorInstruction, LoadConstant, SlotToReg, SlotToReg, FunctionCall, Label, SlotToReg, SlotToReg, SlotToReg,
RegToSlot, RegToSlot, RegToSlot, SlotToReg, SlotToReg, SlotToReg, SlotToReg, OperatorInstruction, LoadConstant, SlotToReg,
RegToSlot, SlotToReg, SlotToReg, FunctionReturn, SlotToReg, SlotToReg, RegToSlot, RegToSlot, RegToSlot, SlotToReg,
SlotToReg, RegToSlot, SlotToReg, SlotToReg, RegToSlot, SlotToReg, RegToSlot, SlotToReg, SlotToReg, FunctionReturn,
SlotToReg, SlotToReg, RegToSlot, SlotToReg, SlotToReg, SlotToReg, SlotToReg, RegToSlot, SlotToReg, SlotToReg,
FunctionReturn, Transfer, Syscall, NilClass] RegToSlot, SlotToReg, SlotToReg, RegToSlot, SlotToReg,
SlotToReg, FunctionReturn, Transfer, Syscall, NilClass]
assert_equal Parfait::Integer , get_return.class assert_equal Parfait::Integer , get_return.class
assert_equal 10 , get_return.value assert_equal 10 , get_return.value
end end
def test_load_5 def test_load_5
lod = ticks( 46 ) lod = ticks( 47 )
assert_equal LoadConstant , lod.class assert_equal LoadConstant , lod.class
assert_equal Parfait::Integer , lod.constant.class assert_equal Parfait::Integer , lod.constant.class
assert_equal 5 , lod.constant.value assert_equal 5 , lod.constant.value
end end
def test_slot_receiver #load receiver from message def test_slot_receiver #load receiver from message
sl = ticks( 57 ) sl = ticks( 58 )
assert_equal SlotToReg , sl.class assert_equal SlotToReg , sl.class
assert_equal :r0 , sl.array.symbol #load from message assert_equal :r0 , sl.array.symbol #load from message
assert_equal 3 , sl.index assert_equal 3 , sl.index
assert_equal :r1 , sl.register.symbol assert_equal :r1 , sl.register.symbol
end end
def test_slot_args #load args from message def test_slot_args #load args from message
sl = ticks( 58 ) sl = ticks( 59 )
assert_equal SlotToReg , sl.class assert_equal SlotToReg , sl.class
assert_equal :r0 , sl.array.symbol #load from message assert_equal :r0 , sl.array.symbol #load from message
assert_equal 9 , sl.index assert_equal 9 , sl.index
assert_equal :r2 , sl.register.symbol assert_equal :r2 , sl.register.symbol
end end
def test_slot_arg #load arg 1, destructively from args def test_slot_arg #load arg 1, destructively from args
sl = ticks( 59 ) sl = ticks( 60 )
assert_equal SlotToReg , sl.class assert_equal SlotToReg , sl.class
assert_equal :r2 , sl.array.symbol #load from message assert_equal :r2 , sl.array.symbol #load from message
assert_equal 2 , sl.index assert_equal 2 , sl.index
assert_equal :r2 , sl.register.symbol assert_equal :r2 , sl.register.symbol
end end
def test_slot_int1 #load int from object def test_slot_int1 #load int from object
sl = ticks( 60 ) sl = ticks( 61 )
assert_equal SlotToReg , sl.class assert_equal SlotToReg , sl.class
assert_equal :r1 , sl.array.symbol #load from message assert_equal :r1 , sl.array.symbol #load from message
assert_equal 3 , sl.index assert_equal 3 , sl.index
assert_equal :r1 , sl.register.symbol assert_equal :r1 , sl.register.symbol
end end
def test_op def test_op
op = ticks(62) op = ticks(63)
assert_equal OperatorInstruction , op.class assert_equal OperatorInstruction , op.class
assert_equal :r1 , op.left.symbol assert_equal :r1 , op.left.symbol
assert_equal :r2 , op.right.symbol assert_equal :r2 , op.right.symbol
@ -75,13 +75,13 @@ module Risc
assert_equal 10 , @interpreter.get_register(:r1) assert_equal 10 , @interpreter.get_register(:r1)
end end
def test_load_int_space def test_load_int_space
cons = ticks(63) cons = ticks(64)
assert_equal LoadConstant , cons.class assert_equal LoadConstant , cons.class
assert_equal Parfait::Space , cons.constant.class assert_equal Parfait::Space , cons.constant.class
assert_equal :r3 , cons.register.symbol assert_equal :r3 , cons.register.symbol
end end
def test_load_int_next_space def test_load_int_next_space
sl = ticks(64) sl = ticks(65)
assert_equal SlotToReg , sl.class assert_equal SlotToReg , sl.class
assert_equal :r3 , sl.array.symbol #load from space assert_equal :r3 , sl.array.symbol #load from space
assert_equal 5 , sl.index assert_equal 5 , sl.index
@ -89,7 +89,7 @@ module Risc
assert_equal Parfait::Integer , @interpreter.get_register(:r2).class assert_equal Parfait::Integer , @interpreter.get_register(:r2).class
end end
def test_load_int_next_int def test_load_int_next_int
sl = ticks(65) sl = ticks(66)
assert_equal SlotToReg , sl.class assert_equal SlotToReg , sl.class
assert_equal :r2 , sl.array.symbol #load from next_int assert_equal :r2 , sl.array.symbol #load from next_int
assert_equal 2 , sl.index assert_equal 2 , sl.index
@ -97,14 +97,14 @@ module Risc
assert_equal Parfait::Integer , @interpreter.get_register(:r4).class assert_equal Parfait::Integer , @interpreter.get_register(:r4).class
end end
def test_load_int_next_int2 def test_load_int_next_int2
sl = ticks(66) sl = ticks(67)
assert_equal RegToSlot , sl.class assert_equal RegToSlot , sl.class
assert_equal :r3 , sl.array.symbol #store to space assert_equal :r3 , sl.array.symbol #store to space
assert_equal 5 , sl.index assert_equal 5 , sl.index
assert_equal :r4 , sl.register.symbol assert_equal :r4 , sl.register.symbol
end end
def test_sys def test_sys
sys = ticks(88) sys = ticks(89)
assert_equal Syscall , sys.class assert_equal Syscall , sys.class
assert_equal :exit , sys.name assert_equal :exit , sys.name
end end

View File

@ -15,31 +15,32 @@ module Risc
SlotToReg, SlotToReg, RegToSlot, LoadConstant, SlotToReg, SlotToReg, SlotToReg, RegToSlot, LoadConstant, SlotToReg,
SlotToReg, SlotToReg, SlotToReg, RegToSlot, LoadConstant, SlotToReg, SlotToReg, SlotToReg, RegToSlot, LoadConstant,
SlotToReg, SlotToReg, SlotToReg, SlotToReg, RegToSlot, SlotToReg, SlotToReg, SlotToReg, SlotToReg, RegToSlot,
SlotToReg, RegToSlot, LoadConstant, RegToSlot, FunctionCall, SlotToReg, LoadConstant, RegToSlot, LoadConstant, RegToSlot,
Label, LoadConstant, SlotToReg, SlotToReg, RegToSlot, FunctionCall, Label, LoadConstant, SlotToReg, SlotToReg,
LoadConstant, SlotToReg, SlotToReg, SlotToReg, SlotToReg,
RegToSlot, LoadConstant, SlotToReg, SlotToReg, SlotToReg, RegToSlot, LoadConstant, SlotToReg, SlotToReg, SlotToReg,
SlotToReg, RegToSlot, LoadConstant, SlotToReg, RegToSlot, SlotToReg, RegToSlot, LoadConstant, SlotToReg, SlotToReg,
LoadConstant, SlotToReg, RegToSlot, SlotToReg, LoadConstant, SlotToReg, SlotToReg, RegToSlot, LoadConstant, SlotToReg,
FunctionCall, Label, SlotToReg, SlotToReg, Transfer, RegToSlot, LoadConstant, SlotToReg, RegToSlot, SlotToReg,
Syscall, Transfer, Transfer, LoadConstant, SlotToReg, LoadConstant, FunctionCall, Label, SlotToReg, SlotToReg,
SlotToReg, RegToSlot, RegToSlot, RegToSlot, SlotToReg, Transfer, Syscall, Transfer, Transfer, LoadConstant,
SlotToReg, RegToSlot, SlotToReg, SlotToReg, FunctionReturn, SlotToReg, SlotToReg, RegToSlot, RegToSlot, RegToSlot,
SlotToReg, SlotToReg, RegToSlot, SlotToReg, SlotToReg, SlotToReg, SlotToReg, RegToSlot, SlotToReg, SlotToReg,
RegToSlot, SlotToReg, SlotToReg, RegToSlot, SlotToReg, FunctionReturn, SlotToReg, SlotToReg, RegToSlot, SlotToReg,
SlotToReg, FunctionReturn, Transfer, Syscall, NilClass] SlotToReg, RegToSlot, SlotToReg, SlotToReg, RegToSlot,
SlotToReg, SlotToReg, FunctionReturn, Transfer, Syscall,
NilClass]
assert_equal "Hello again" , @interpreter.stdout assert_equal "Hello again" , @interpreter.stdout
assert_equal Parfait::Integer , get_return.class assert_equal Parfait::Integer , get_return.class
assert_equal 11 , get_return.value #bytes written assert_equal 11 , get_return.value #bytes written
end end
def test_call def test_call
cal = ticks(51) cal = ticks(52)
assert_equal FunctionCall , cal.class assert_equal FunctionCall , cal.class
assert_equal :putstring , cal.method.name assert_equal :putstring , cal.method.name
end end
def test_putstring_sys def test_putstring_sys
done = ticks(56) done = ticks(57)
assert_equal Syscall , done.class assert_equal Syscall , done.class
assert_equal "Hello again" , @interpreter.stdout assert_equal "Hello again" , @interpreter.stdout
assert_equal 11 , @interpreter.get_register(:r0) assert_equal 11 , @interpreter.get_register(:r0)
@ -47,28 +48,28 @@ module Risc
assert_equal "Hello again" , @interpreter.get_register(:r1).to_string assert_equal "Hello again" , @interpreter.get_register(:r1).to_string
end end
def test_move_sys_return def test_move_sys_return
sl = ticks(57) sl = ticks(58)
assert_equal Transfer , sl.class assert_equal Transfer , sl.class
assert_equal :r0 , sl.from.symbol assert_equal :r0 , sl.from.symbol
assert_equal :r1 , sl.to.symbol assert_equal :r1 , sl.to.symbol
assert_equal 11 , @interpreter.get_register(:r1) assert_equal 11 , @interpreter.get_register(:r1)
end end
def test_restore_message def test_restore_message
sl = ticks(58) sl = ticks(59)
assert_equal Transfer , sl.class assert_equal Transfer , sl.class
assert_equal :r8 , sl.from.symbol assert_equal :r8 , sl.from.symbol
assert_equal :r0 , sl.to.symbol assert_equal :r0 , sl.to.symbol
assert_equal Parfait::Message , @interpreter.get_register(:r0).class assert_equal Parfait::Message , @interpreter.get_register(:r0).class
end end
def test_save_sys_return def test_save_sys_return
sl = ticks(63) sl = ticks(64)
assert_equal RegToSlot , sl.class assert_equal RegToSlot , sl.class
assert_equal :r1 , sl.register.symbol #return assert_equal :r1 , sl.register.symbol #return
assert_equal :r2 , sl.array.symbol #parfait integer assert_equal :r2 , sl.array.symbol #parfait integer
assert_equal 3 , sl.index assert_equal 3 , sl.index
end end
def test_return def test_return
done = ticks(70) done = ticks(71)
assert_equal FunctionReturn , done.class assert_equal FunctionReturn , done.class
end end

View File

@ -15,38 +15,38 @@ module Risc
SlotToReg, SlotToReg, RegToSlot, LoadConstant, SlotToReg, SlotToReg, SlotToReg, RegToSlot, LoadConstant, SlotToReg,
SlotToReg, SlotToReg, SlotToReg, RegToSlot, LoadConstant, SlotToReg, SlotToReg, SlotToReg, RegToSlot, LoadConstant,
SlotToReg, SlotToReg, SlotToReg, SlotToReg, RegToSlot, SlotToReg, SlotToReg, SlotToReg, SlotToReg, RegToSlot,
SlotToReg, RegToSlot, LoadConstant, RegToSlot, FunctionCall, SlotToReg, LoadConstant, RegToSlot, LoadConstant, RegToSlot,
Label, LoadConstant, RegToSlot, SlotToReg, SlotToReg, FunctionCall, Label, LoadConstant, RegToSlot, SlotToReg,
RegToSlot, SlotToReg, SlotToReg, FunctionReturn, Transfer, SlotToReg, RegToSlot, SlotToReg, SlotToReg, FunctionReturn,
Syscall, NilClass] Transfer, Syscall, NilClass]
assert_equal 5 , get_return.value assert_equal 5 , get_return.value
end end
def test_call_main def test_call_main
call_ins = ticks(25) call_ins = ticks(26)
assert_equal FunctionCall , call_ins.class assert_equal FunctionCall , call_ins.class
assert :main , call_ins.method.name assert :main , call_ins.method.name
end end
def test_label_main def test_label_main
call_ins = ticks(26) call_ins = ticks(27)
assert_equal Label , call_ins.class assert_equal Label , call_ins.class
assert :main , call_ins.name assert :main , call_ins.name
end end
def test_load_5 def test_load_5
load_ins = ticks 27 load_ins = ticks 28
assert_equal LoadConstant , load_ins.class assert_equal LoadConstant , load_ins.class
assert_equal 5 , @interpreter.get_register(load_ins.register).value assert_equal 5 , @interpreter.get_register(load_ins.register).value
end end
def test_transfer def test_transfer
transfer = ticks(35) transfer = ticks(36)
assert_equal Transfer , transfer.class assert_equal Transfer , transfer.class
end end
def test_sys def test_sys
sys = ticks(36) sys = ticks(37)
assert_equal Syscall , sys.class assert_equal Syscall , sys.class
end end
def test_return def test_return
ret = ticks(34) ret = ticks(35)
assert_equal FunctionReturn , ret.class assert_equal FunctionReturn , ret.class
link = @interpreter.get_register( ret.register ) link = @interpreter.get_register( ret.register )
assert_equal Label , link.class assert_equal Label , link.class

View File

@ -15,30 +15,31 @@ module Risc
SlotToReg, SlotToReg, RegToSlot, LoadConstant, SlotToReg, SlotToReg, SlotToReg, RegToSlot, LoadConstant, SlotToReg,
SlotToReg, SlotToReg, SlotToReg, RegToSlot, LoadConstant, SlotToReg, SlotToReg, SlotToReg, RegToSlot, LoadConstant,
SlotToReg, SlotToReg, SlotToReg, SlotToReg, RegToSlot, SlotToReg, SlotToReg, SlotToReg, SlotToReg, RegToSlot,
SlotToReg, RegToSlot, LoadConstant, RegToSlot, FunctionCall, SlotToReg, LoadConstant, RegToSlot, LoadConstant, RegToSlot,
Label, LoadConstant, SlotToReg, SlotToReg, RegToSlot, FunctionCall, Label, LoadConstant, SlotToReg, SlotToReg,
LoadConstant, SlotToReg, SlotToReg, SlotToReg, SlotToReg,
RegToSlot, LoadConstant, SlotToReg, SlotToReg, SlotToReg, RegToSlot, LoadConstant, SlotToReg, SlotToReg, SlotToReg,
SlotToReg, RegToSlot, LoadConstant, SlotToReg, RegToSlot, SlotToReg, RegToSlot, LoadConstant, SlotToReg, SlotToReg,
LoadConstant, SlotToReg, SlotToReg, RegToSlot, LoadConstant,
SlotToReg, SlotToReg, RegToSlot, LoadConstant, SlotToReg, SlotToReg, SlotToReg, RegToSlot, LoadConstant, SlotToReg,
RegToSlot, SlotToReg, LoadConstant, FunctionCall, Label, RegToSlot, LoadConstant, SlotToReg, SlotToReg, RegToSlot,
SlotToReg, SlotToReg, SlotToReg, SlotToReg, SlotToReg, LoadConstant, SlotToReg, SlotToReg, RegToSlot, LoadConstant,
SlotToReg, SlotToReg, RegToByte, RegToSlot, SlotToReg, SlotToReg, RegToSlot, SlotToReg, LoadConstant, FunctionCall,
SlotToReg, RegToSlot, SlotToReg, SlotToReg, FunctionReturn, Label, SlotToReg, SlotToReg, SlotToReg, SlotToReg,
SlotToReg, SlotToReg, SlotToReg, RegToByte, RegToSlot,
SlotToReg, SlotToReg, RegToSlot, SlotToReg, SlotToReg, SlotToReg, SlotToReg, RegToSlot, SlotToReg, SlotToReg,
RegToSlot, SlotToReg, SlotToReg, RegToSlot, SlotToReg, FunctionReturn, SlotToReg, SlotToReg, RegToSlot, SlotToReg,
SlotToReg, FunctionReturn, Transfer, Syscall, NilClass] SlotToReg, RegToSlot, SlotToReg, SlotToReg, RegToSlot,
SlotToReg, SlotToReg, FunctionReturn, Transfer, Syscall,
NilClass]
assert_equal Parfait::Word , get_return.class assert_equal Parfait::Word , get_return.class
assert_equal "Kello" , get_return.to_string assert_equal "Kello" , get_return.to_string
end end
def test_reg_to_byte def test_reg_to_byte
done = ticks(68) done = ticks(69)
assert_equal RegToByte , done.class assert_equal RegToByte , done.class
assert_equal "K".ord , @interpreter.get_register(done.register) assert_equal "K".ord , @interpreter.get_register(done.register)
end end
def test_exit def test_exit
done = ticks(89) done = ticks(90)
assert_equal Syscall , done.class assert_equal Syscall , done.class
end end

View File

@ -15,16 +15,16 @@ module Risc
SlotToReg, SlotToReg, RegToSlot, LoadConstant, SlotToReg, SlotToReg, SlotToReg, RegToSlot, LoadConstant, SlotToReg,
SlotToReg, SlotToReg, SlotToReg, RegToSlot, LoadConstant, SlotToReg, SlotToReg, SlotToReg, RegToSlot, LoadConstant,
SlotToReg, SlotToReg, SlotToReg, SlotToReg, RegToSlot, SlotToReg, SlotToReg, SlotToReg, SlotToReg, RegToSlot,
SlotToReg, RegToSlot, LoadConstant, RegToSlot, FunctionCall, SlotToReg, LoadConstant, RegToSlot, LoadConstant, RegToSlot,
Label, LoadConstant, LoadConstant, OperatorInstruction, IsNotZero, FunctionCall, Label, LoadConstant, LoadConstant, OperatorInstruction,
Label, LoadConstant, RegToSlot, SlotToReg, SlotToReg, IsNotZero, Label, LoadConstant, RegToSlot, SlotToReg,
RegToSlot, SlotToReg, SlotToReg, FunctionReturn, Transfer, SlotToReg, RegToSlot, SlotToReg, SlotToReg, FunctionReturn,
Syscall, NilClass] Transfer, Syscall, NilClass]
assert_equal Parfait::Word , get_return.class assert_equal Parfait::Word , get_return.class
assert_equal "else" , get_return.to_string assert_equal "else" , get_return.to_string
end end
def test_exit def test_exit
done = ticks(41) done = ticks(42)
assert_equal Syscall , done.class assert_equal Syscall , done.class
end end
end end

View File

@ -39,9 +39,8 @@ module Risc
puts e.backtrace puts e.backtrace
end end
str = classes.to_s.gsub("Risc::","") str = classes.to_s.gsub("Risc::","")
str.split(",").each_slice(5).each do |line| all = str.split(",").each_slice(5).collect {|line| " " + line.join(",")}
puts " " + line.join(",") + "," puts all.join(",\n")
end
puts "length = #{classes.length}" puts "length = #{classes.length}"
exit(1) exit(1)
end end