fixed some interpreter tests

hoisting is slightly more simple and that adds a couple insstructions
This commit is contained in:
Torsten Ruger 2018-07-20 21:00:47 +03:00
parent 6022aa4dab
commit b00b0cf064
5 changed files with 119 additions and 112 deletions

View File

@ -11,32 +11,33 @@ module Risc
def test_chain def test_chain
#show_main_ticks # get output of what is #show_main_ticks # get output of what is
check_main_chain [LoadConstant, SlotToReg, RegToSlot, LoadConstant, LoadConstant, check_main_chain [LoadConstant, SlotToReg, RegToSlot, SlotToReg, SlotToReg,
SlotToReg, RegToSlot, RegToSlot, SlotToReg, SlotToReg, SlotToReg, RegToSlot, LoadConstant, LoadConstant, SlotToReg,
RegToSlot, SlotToReg, SlotToReg, Branch, RegToSlot, RegToSlot, RegToSlot, SlotToReg, Branch, SlotToReg,
SlotToReg, RegToSlot, SlotToReg, RegToSlot, LoadConstant, RegToSlot, SlotToReg, SlotToReg, RegToSlot, SlotToReg,
SlotToReg, RegToSlot, SlotToReg, SlotToReg, SlotToReg, RegToSlot, SlotToReg, RegToSlot, LoadConstant, SlotToReg,
SlotToReg, RegToSlot, Branch, LoadConstant, SlotToReg, RegToSlot, SlotToReg, Branch, SlotToReg, SlotToReg,
RegToSlot, SlotToReg, FunctionCall, SlotToReg, SlotToReg,
SlotToReg, SlotToReg, SlotToReg, OperatorInstruction, LoadConstant,
SlotToReg, SlotToReg, RegToSlot, RegToSlot, RegToSlot,
SlotToReg, Branch, SlotToReg, RegToSlot, SlotToReg,
SlotToReg, SlotToReg, FunctionReturn, SlotToReg, SlotToReg,
RegToSlot, LoadConstant, LoadConstant, SlotToReg, RegToSlot,
RegToSlot, Branch, SlotToReg, SlotToReg, RegToSlot,
SlotToReg, SlotToReg, RegToSlot, SlotToReg, RegToSlot,
SlotToReg, RegToSlot, LoadConstant, SlotToReg, RegToSlot, SlotToReg, RegToSlot, LoadConstant, SlotToReg, RegToSlot,
Branch, SlotToReg, SlotToReg, SlotToReg, SlotToReg, SlotToReg, FunctionCall, SlotToReg, SlotToReg, SlotToReg,
RegToSlot, LoadConstant, SlotToReg, RegToSlot, SlotToReg, SlotToReg, SlotToReg, OperatorInstruction, LoadConstant, SlotToReg,
FunctionCall, SlotToReg, SlotToReg, SlotToReg, SlotToReg, SlotToReg, RegToSlot, RegToSlot, RegToSlot, SlotToReg,
SlotToReg, OperatorInstruction, LoadConstant, SlotToReg, SlotToReg, Branch, SlotToReg, RegToSlot, SlotToReg, SlotToReg,
RegToSlot, RegToSlot, RegToSlot, SlotToReg, Branch, SlotToReg, FunctionReturn, SlotToReg, SlotToReg, RegToSlot,
SlotToReg, RegToSlot, SlotToReg, SlotToReg, SlotToReg, SlotToReg, Branch, SlotToReg, SlotToReg, RegToSlot,
FunctionReturn, SlotToReg, SlotToReg, RegToSlot, Branch, LoadConstant, LoadConstant, SlotToReg, RegToSlot, RegToSlot,
SlotToReg, SlotToReg, RegToSlot, SlotToReg, SlotToReg, SlotToReg, SlotToReg, RegToSlot, SlotToReg, SlotToReg,
Branch, RegToSlot, SlotToReg, RegToSlot, SlotToReg,
RegToSlot, LoadConstant, SlotToReg, RegToSlot, SlotToReg,
SlotToReg, SlotToReg, SlotToReg, RegToSlot, Branch,
LoadConstant, SlotToReg, RegToSlot, SlotToReg, FunctionCall,
SlotToReg, SlotToReg, SlotToReg, SlotToReg, SlotToReg,
OperatorInstruction, LoadConstant, SlotToReg, SlotToReg, RegToSlot,
RegToSlot, RegToSlot, SlotToReg, Branch, SlotToReg,
RegToSlot, SlotToReg, SlotToReg, SlotToReg, FunctionReturn, RegToSlot, SlotToReg, SlotToReg, SlotToReg, FunctionReturn,
Transfer, SlotToReg, Branch, SlotToReg, Syscall, SlotToReg, SlotToReg, RegToSlot, SlotToReg, SlotToReg,
NilClass] RegToSlot, SlotToReg, SlotToReg, Branch, RegToSlot,
SlotToReg, SlotToReg, SlotToReg, FunctionReturn, Transfer,
SlotToReg, Branch, SlotToReg, Syscall, NilClass]
assert_equal 15 , get_return assert_equal 15 , get_return
end end

View File

@ -11,21 +11,22 @@ module Risc
def test_chain def test_chain
#show_main_ticks # get output of what is #show_main_ticks # get output of what is
check_main_chain [LoadConstant, SlotToReg, RegToSlot, LoadConstant, LoadConstant, check_main_chain [LoadConstant, SlotToReg, RegToSlot, SlotToReg, SlotToReg,
SlotToReg, RegToSlot, RegToSlot, SlotToReg, SlotToReg, SlotToReg, RegToSlot, LoadConstant, LoadConstant, SlotToReg,
RegToSlot, SlotToReg, SlotToReg, Branch, RegToSlot, RegToSlot, RegToSlot, SlotToReg, Branch, SlotToReg,
SlotToReg, RegToSlot, SlotToReg, RegToSlot, LoadConstant,
SlotToReg, RegToSlot, SlotToReg, SlotToReg, SlotToReg,
SlotToReg, RegToSlot, Branch, LoadConstant, SlotToReg,
RegToSlot, SlotToReg, FunctionCall, SlotToReg, SlotToReg,
SlotToReg, SlotToReg, SlotToReg, OperatorInstruction, LoadConstant,
SlotToReg, SlotToReg, RegToSlot, RegToSlot, RegToSlot,
SlotToReg, Branch, SlotToReg, RegToSlot, SlotToReg,
SlotToReg, SlotToReg, FunctionReturn, SlotToReg, SlotToReg,
RegToSlot, SlotToReg, SlotToReg, RegToSlot, SlotToReg, RegToSlot, SlotToReg, SlotToReg, RegToSlot, SlotToReg,
SlotToReg, Branch, RegToSlot, SlotToReg, SlotToReg, RegToSlot, SlotToReg, RegToSlot, LoadConstant, SlotToReg,
SlotToReg, FunctionReturn, Transfer, SlotToReg, Branch, RegToSlot, SlotToReg, Branch, SlotToReg, SlotToReg,
SlotToReg, Syscall, NilClass] SlotToReg, RegToSlot, LoadConstant, SlotToReg, RegToSlot,
SlotToReg, FunctionCall, SlotToReg, SlotToReg, SlotToReg,
SlotToReg, SlotToReg, OperatorInstruction, LoadConstant, SlotToReg,
SlotToReg, RegToSlot, RegToSlot, RegToSlot, SlotToReg,
Branch, SlotToReg, RegToSlot, SlotToReg, SlotToReg,
SlotToReg, FunctionReturn, SlotToReg, SlotToReg, RegToSlot,
SlotToReg, Branch, SlotToReg, RegToSlot, SlotToReg,
SlotToReg, RegToSlot, SlotToReg, SlotToReg, SlotToReg,
FunctionReturn, Transfer, SlotToReg, Branch, SlotToReg,
Syscall, NilClass]
assert_equal 10 , get_return assert_equal 10 , get_return
end end
end end

View File

@ -11,48 +11,51 @@ module Risc
def test_if def test_if
#show_main_ticks # get output of what is in main #show_main_ticks # get output of what is in main
check_main_chain [LoadConstant, SlotToReg, RegToSlot, LoadConstant, LoadConstant, check_main_chain [LoadConstant, SlotToReg, RegToSlot, SlotToReg, SlotToReg,
SlotToReg, RegToSlot, RegToSlot, SlotToReg, SlotToReg, SlotToReg, RegToSlot, LoadConstant, LoadConstant, SlotToReg,
RegToSlot, SlotToReg, SlotToReg, Branch, RegToSlot, RegToSlot, RegToSlot, SlotToReg, Branch, SlotToReg,
SlotToReg, RegToSlot, SlotToReg, RegToSlot, LoadConstant, RegToSlot, SlotToReg, SlotToReg, RegToSlot, SlotToReg,
SlotToReg, RegToSlot, SlotToReg, SlotToReg, SlotToReg,
SlotToReg, RegToSlot, Branch, LoadConstant, SlotToReg,
RegToSlot, SlotToReg, FunctionCall, SlotToReg, SlotToReg,
SlotToReg, SlotToReg, SlotToReg, OperatorInstruction, IsMinus,
LoadConstant, Branch, RegToSlot, SlotToReg, SlotToReg,
Branch, RegToSlot, SlotToReg, SlotToReg, SlotToReg,
FunctionReturn, SlotToReg, SlotToReg, RegToSlot, SlotToReg,
SlotToReg, LoadConstant, OperatorInstruction, IsZero, Branch,
LoadConstant, OperatorInstruction, IsZero, LoadConstant, LoadConstant,
SlotToReg, RegToSlot, RegToSlot, SlotToReg, SlotToReg,
RegToSlot, SlotToReg, SlotToReg, Branch, RegToSlot,
SlotToReg, RegToSlot, SlotToReg, RegToSlot, LoadConstant,
SlotToReg, RegToSlot, SlotToReg, SlotToReg, SlotToReg,
SlotToReg, RegToSlot, Branch, LoadConstant, SlotToReg,
RegToSlot, SlotToReg, FunctionCall, SlotToReg, SlotToReg,
SlotToReg, SlotToReg, SlotToReg, OperatorInstruction, LoadConstant,
SlotToReg, SlotToReg, RegToSlot, RegToSlot, RegToSlot,
SlotToReg, Branch, SlotToReg, RegToSlot, SlotToReg,
SlotToReg, SlotToReg, FunctionReturn, SlotToReg, SlotToReg,
RegToSlot, Branch, LoadConstant, LoadConstant, SlotToReg,
RegToSlot, RegToSlot, SlotToReg, SlotToReg, RegToSlot,
SlotToReg, SlotToReg, Branch, RegToSlot, SlotToReg,
RegToSlot, SlotToReg, RegToSlot, LoadConstant, SlotToReg, RegToSlot, SlotToReg, RegToSlot, LoadConstant, SlotToReg,
RegToSlot, SlotToReg, SlotToReg, SlotToReg, SlotToReg, RegToSlot, SlotToReg, Branch, SlotToReg, SlotToReg,
RegToSlot, Branch, LoadConstant, SlotToReg, RegToSlot, SlotToReg, RegToSlot, LoadConstant, SlotToReg, RegToSlot,
SlotToReg, FunctionCall, SlotToReg, SlotToReg, SlotToReg, SlotToReg, FunctionCall, SlotToReg, SlotToReg, SlotToReg,
SlotToReg, SlotToReg, OperatorInstruction, IsMinus, LoadConstant, SlotToReg, SlotToReg, OperatorInstruction, IsMinus, LoadConstant,
RegToSlot, SlotToReg, SlotToReg, Branch, RegToSlot, Branch, RegToSlot, SlotToReg, SlotToReg, Branch,
SlotToReg, SlotToReg, SlotToReg, FunctionReturn, SlotToReg, RegToSlot, SlotToReg, SlotToReg, SlotToReg, FunctionReturn,
SlotToReg, RegToSlot, SlotToReg, SlotToReg, LoadConstant, SlotToReg, SlotToReg, RegToSlot, SlotToReg, Branch,
OperatorInstruction, IsZero, SlotToReg, SlotToReg, RegToSlot, SlotToReg, LoadConstant, OperatorInstruction, IsZero, LoadConstant,
SlotToReg, Branch, SlotToReg, RegToSlot, SlotToReg, OperatorInstruction, IsZero, SlotToReg, SlotToReg, SlotToReg,
SlotToReg, SlotToReg, FunctionReturn, Transfer, SlotToReg, RegToSlot, LoadConstant, LoadConstant, Branch, SlotToReg,
Branch, SlotToReg, Syscall, NilClass] RegToSlot, RegToSlot, SlotToReg, SlotToReg, RegToSlot,
SlotToReg, SlotToReg, RegToSlot, SlotToReg, RegToSlot,
SlotToReg, RegToSlot, Branch, LoadConstant, SlotToReg,
RegToSlot, SlotToReg, SlotToReg, SlotToReg, SlotToReg,
RegToSlot, LoadConstant, SlotToReg, RegToSlot, SlotToReg,
FunctionCall, SlotToReg, SlotToReg, SlotToReg, SlotToReg,
SlotToReg, OperatorInstruction, LoadConstant, SlotToReg, SlotToReg,
RegToSlot, RegToSlot, RegToSlot, SlotToReg, Branch,
SlotToReg, RegToSlot, SlotToReg, SlotToReg, SlotToReg,
FunctionReturn, SlotToReg, SlotToReg, RegToSlot, Branch,
SlotToReg, SlotToReg, SlotToReg, RegToSlot, LoadConstant,
LoadConstant, SlotToReg, RegToSlot, RegToSlot, SlotToReg,
Branch, SlotToReg, RegToSlot, SlotToReg, SlotToReg,
RegToSlot, SlotToReg, RegToSlot, SlotToReg, RegToSlot,
LoadConstant, SlotToReg, RegToSlot, SlotToReg, Branch,
SlotToReg, SlotToReg, SlotToReg, RegToSlot, LoadConstant,
SlotToReg, RegToSlot, SlotToReg, FunctionCall, SlotToReg,
SlotToReg, SlotToReg, SlotToReg, SlotToReg, OperatorInstruction,
IsMinus, LoadConstant, RegToSlot, SlotToReg, SlotToReg,
Branch, RegToSlot, SlotToReg, SlotToReg, SlotToReg,
FunctionReturn, SlotToReg, SlotToReg, RegToSlot, SlotToReg,
Branch, SlotToReg, LoadConstant, OperatorInstruction, IsZero,
SlotToReg, SlotToReg, RegToSlot, SlotToReg, SlotToReg,
RegToSlot, SlotToReg, SlotToReg, SlotToReg, Branch,
FunctionReturn, Transfer, SlotToReg, Branch, SlotToReg,
Syscall, NilClass]
assert_equal 1 , get_return assert_equal 1 , get_return
end end
def test_exit def test_exit
done = main_ticks(188) done = main_ticks(201)
assert_equal Syscall , done.class assert_equal Syscall , done.class
end end
end end

View File

@ -11,49 +11,51 @@ module Risc
def test_if def test_if
#show_main_ticks # get output of what is in main #show_main_ticks # get output of what is in main
check_main_chain [LoadConstant, SlotToReg, RegToSlot, LoadConstant, LoadConstant, check_main_chain [LoadConstant, SlotToReg, RegToSlot, SlotToReg, SlotToReg,
SlotToReg, RegToSlot, RegToSlot, SlotToReg, SlotToReg, SlotToReg, RegToSlot, LoadConstant, LoadConstant, SlotToReg,
RegToSlot, SlotToReg, SlotToReg, Branch, RegToSlot, RegToSlot, RegToSlot, SlotToReg, Branch, SlotToReg,
SlotToReg, RegToSlot, SlotToReg, RegToSlot, LoadConstant, RegToSlot, SlotToReg, SlotToReg, RegToSlot, SlotToReg,
SlotToReg, RegToSlot, SlotToReg, SlotToReg, SlotToReg, RegToSlot, SlotToReg, RegToSlot, LoadConstant, SlotToReg,
SlotToReg, RegToSlot, Branch, LoadConstant, SlotToReg, RegToSlot, SlotToReg, Branch, SlotToReg, SlotToReg,
RegToSlot, SlotToReg, FunctionCall, SlotToReg, SlotToReg, SlotToReg, RegToSlot, LoadConstant, SlotToReg, RegToSlot,
SlotToReg, SlotToReg, SlotToReg, OperatorInstruction, IsMinus, SlotToReg, FunctionCall, SlotToReg, SlotToReg, SlotToReg,
IsZero, LoadConstant, Branch, RegToSlot, SlotToReg, SlotToReg, SlotToReg, OperatorInstruction, IsMinus, IsZero,
Branch, SlotToReg, RegToSlot, SlotToReg, SlotToReg, LoadConstant, Branch, RegToSlot, SlotToReg, Branch,
SlotToReg, FunctionReturn, SlotToReg, SlotToReg, RegToSlot,
SlotToReg, SlotToReg, LoadConstant, OperatorInstruction, IsZero,
Branch, LoadConstant, OperatorInstruction, IsZero, LoadConstant,
LoadConstant, SlotToReg, RegToSlot, RegToSlot, SlotToReg,
SlotToReg, RegToSlot, SlotToReg, SlotToReg, Branch,
RegToSlot, SlotToReg, RegToSlot, SlotToReg, RegToSlot,
LoadConstant, SlotToReg, RegToSlot, SlotToReg, SlotToReg,
SlotToReg, SlotToReg, RegToSlot, Branch, LoadConstant,
SlotToReg, RegToSlot, SlotToReg, FunctionCall, SlotToReg,
SlotToReg, SlotToReg, SlotToReg, SlotToReg, OperatorInstruction,
LoadConstant, SlotToReg, SlotToReg, RegToSlot, RegToSlot,
RegToSlot, SlotToReg, Branch, SlotToReg, RegToSlot,
SlotToReg, SlotToReg, SlotToReg, FunctionReturn, SlotToReg,
SlotToReg, RegToSlot, Branch, LoadConstant, LoadConstant,
SlotToReg, RegToSlot, RegToSlot, SlotToReg, SlotToReg,
RegToSlot, SlotToReg, SlotToReg, Branch, RegToSlot,
SlotToReg, RegToSlot, SlotToReg, RegToSlot, LoadConstant,
SlotToReg, RegToSlot, SlotToReg, SlotToReg, SlotToReg,
SlotToReg, RegToSlot, Branch, LoadConstant, SlotToReg,
RegToSlot, SlotToReg, FunctionCall, SlotToReg, SlotToReg,
SlotToReg, SlotToReg, SlotToReg, OperatorInstruction, IsMinus,
IsZero, LoadConstant, RegToSlot, SlotToReg, Branch,
SlotToReg, RegToSlot, SlotToReg, SlotToReg, SlotToReg, SlotToReg, RegToSlot, SlotToReg, SlotToReg, SlotToReg,
FunctionReturn, SlotToReg, SlotToReg, RegToSlot, SlotToReg, FunctionReturn, SlotToReg, SlotToReg, RegToSlot, SlotToReg,
SlotToReg, LoadConstant, OperatorInstruction, IsZero, SlotToReg, Branch, SlotToReg, LoadConstant, OperatorInstruction, IsZero,
SlotToReg, RegToSlot, SlotToReg, Branch, SlotToReg, LoadConstant, OperatorInstruction, IsZero, SlotToReg, SlotToReg,
RegToSlot, SlotToReg, SlotToReg, SlotToReg, FunctionReturn, SlotToReg, RegToSlot, LoadConstant, LoadConstant, Branch,
Transfer, SlotToReg, Branch, SlotToReg, Syscall, SlotToReg, RegToSlot, RegToSlot, SlotToReg, SlotToReg,
NilClass] RegToSlot, SlotToReg, SlotToReg, RegToSlot, SlotToReg,
RegToSlot, SlotToReg, RegToSlot, Branch, LoadConstant,
SlotToReg, RegToSlot, SlotToReg, SlotToReg, SlotToReg,
SlotToReg, RegToSlot, LoadConstant, SlotToReg, RegToSlot,
SlotToReg, FunctionCall, SlotToReg, SlotToReg, SlotToReg,
SlotToReg, SlotToReg, OperatorInstruction, LoadConstant, SlotToReg,
SlotToReg, RegToSlot, RegToSlot, RegToSlot, SlotToReg,
Branch, SlotToReg, RegToSlot, SlotToReg, SlotToReg,
SlotToReg, FunctionReturn, SlotToReg, SlotToReg, RegToSlot,
Branch, SlotToReg, SlotToReg, SlotToReg, RegToSlot,
LoadConstant, LoadConstant, SlotToReg, RegToSlot, RegToSlot,
SlotToReg, Branch, SlotToReg, RegToSlot, SlotToReg,
SlotToReg, RegToSlot, SlotToReg, RegToSlot, SlotToReg,
RegToSlot, LoadConstant, SlotToReg, RegToSlot, SlotToReg,
Branch, SlotToReg, SlotToReg, SlotToReg, RegToSlot,
LoadConstant, SlotToReg, RegToSlot, SlotToReg, FunctionCall,
SlotToReg, SlotToReg, SlotToReg, SlotToReg, SlotToReg,
OperatorInstruction, IsMinus, IsZero, LoadConstant, RegToSlot,
SlotToReg, Branch, SlotToReg, RegToSlot, SlotToReg,
SlotToReg, SlotToReg, FunctionReturn, SlotToReg, SlotToReg,
RegToSlot, SlotToReg, Branch, SlotToReg, LoadConstant,
OperatorInstruction, IsZero, SlotToReg, SlotToReg, RegToSlot,
SlotToReg, SlotToReg, RegToSlot, SlotToReg, SlotToReg,
SlotToReg, Branch, FunctionReturn, Transfer, SlotToReg,
Branch, SlotToReg, Syscall, NilClass]
assert_equal 0 , get_return assert_equal 0 , get_return
end end
def test_exit def test_exit
done = main_ticks(190) done = main_ticks(203)
assert_equal Syscall , done.class assert_equal Syscall , done.class
end end
end end

View File

@ -19,7 +19,7 @@ module Risc
ticks( start_at ) if start_at > 0 ticks( start_at ) if start_at > 0
should.each_with_index do |name , index| should.each_with_index do |name , index|
got = ticks(1) got = ticks(1)
assert_equal got.class ,name , "Wrong class for #{index + 1 - start_at}, expect #{name} , got #{got}" assert_equal got.class ,name , "Wrong class for #{index + 1}, expect #{name} , got #{got}"
end end
end end
# check the main only, ignoring the __init instructions # check the main only, ignoring the __init instructions