From 14f8b42015277e63cabfaf2c0b457b7bd291247c Mon Sep 17 00:00:00 2001 From: Torsten Ruger Date: Tue, 3 Nov 2015 11:25:02 +0200 Subject: [PATCH] fix instruction order, now with the save and finally formatted in statements too --- test/compiler/statements/test_assign.rb | 6 +-- test/compiler/statements/test_call.rb | 31 ++++++++------- test/compiler/statements/test_class.rb | 6 +-- test/compiler/statements/test_return.rb | 4 +- test/interpreter/test_add.rb | 20 ++++++---- test/interpreter/test_if.rb | 26 ++++++------ test/interpreter/test_puti.rb | 53 ++++++++++++------------- test/interpreter/test_puts.rb | 32 ++++++--------- 8 files changed, 88 insertions(+), 90 deletions(-) diff --git a/test/compiler/statements/test_assign.rb b/test/compiler/statements/test_assign.rb index f7610d98..51ee6bce 100644 --- a/test/compiler/statements/test_assign.rb +++ b/test/compiler/statements/test_assign.rb @@ -54,9 +54,9 @@ class Object end end HERE - @expect = [Label, GetSlot, GetSlot, SetSlot, LoadConstant, SetSlot, LoadConstant , - SetSlot, LoadConstant, SetSlot, RegisterTransfer, FunctionCall, GetSlot, GetSlot , - SetSlot, Label, RegisterTransfer, GetSlot, FunctionReturn] + @expect = [Label, GetSlot, GetSlot, SetSlot, LoadConstant, SetSlot, LoadConstant , + SetSlot, LoadConstant, SetSlot, RegisterTransfer, FunctionCall, Label, GetSlot , + GetSlot, SetSlot, Label, RegisterTransfer, GetSlot, FunctionReturn] check end diff --git a/test/compiler/statements/test_call.rb b/test/compiler/statements/test_call.rb index 48cb6cb2..33977cc7 100644 --- a/test/compiler/statements/test_call.rb +++ b/test/compiler/statements/test_call.rb @@ -17,9 +17,9 @@ class Object end end HERE - @expect = [Label, GetSlot, LoadConstant, SetSlot, LoadConstant, SetSlot, LoadConstant , - SetSlot, LoadConstant, SetSlot, RegisterTransfer, FunctionCall, GetSlot, Label , - RegisterTransfer, GetSlot, FunctionReturn] + @expect = [Label, GetSlot, LoadConstant, SetSlot, LoadConstant, SetSlot, LoadConstant , + SetSlot, LoadConstant, SetSlot, RegisterTransfer, FunctionCall, Label, GetSlot , + Label, RegisterTransfer, GetSlot, FunctionReturn] check end @@ -37,9 +37,9 @@ class Object end end HERE - @expect = [Label, GetSlot, LoadConstant, SetSlot, LoadConstant, SetSlot, LoadConstant , - SetSlot, LoadConstant, SetSlot, RegisterTransfer, FunctionCall, GetSlot, Label , - RegisterTransfer, GetSlot, FunctionReturn] + @expect = [Label, GetSlot, LoadConstant, SetSlot, LoadConstant, SetSlot, LoadConstant , + SetSlot, LoadConstant, SetSlot, RegisterTransfer, FunctionCall, Label, GetSlot , + Label, RegisterTransfer, GetSlot, FunctionReturn] check end @@ -57,9 +57,10 @@ class Object end end HERE - @expect = [Label, LoadConstant, GetSlot, SetSlot, GetSlot, GetSlot, GetSlot , - SetSlot, LoadConstant, SetSlot, LoadConstant, SetSlot, LoadConstant, SetSlot , - RegisterTransfer, FunctionCall, GetSlot, Label, RegisterTransfer, GetSlot, FunctionReturn] + @expect = [Label, LoadConstant, GetSlot, SetSlot, GetSlot, GetSlot, GetSlot , + SetSlot, LoadConstant, SetSlot, LoadConstant, SetSlot, LoadConstant, SetSlot , + RegisterTransfer, FunctionCall, Label, GetSlot, Label, RegisterTransfer, GetSlot , + FunctionReturn] check end @@ -77,9 +78,9 @@ class Object end end HERE - @expect = [Label, GetSlot, GetSlot, GetSlot, SetSlot, LoadConstant, SetSlot , - LoadConstant, SetSlot, LoadConstant, SetSlot, RegisterTransfer, FunctionCall, GetSlot , - Label, RegisterTransfer, GetSlot, FunctionReturn] + @expect = [Label, GetSlot, GetSlot, GetSlot, SetSlot, LoadConstant, SetSlot , + LoadConstant, SetSlot, LoadConstant, SetSlot, RegisterTransfer, FunctionCall, Label , + GetSlot, Label, RegisterTransfer, GetSlot, FunctionReturn] check end @@ -94,9 +95,9 @@ int main() end end HERE - @expect = [Label, GetSlot, GetSlot, SetSlot, LoadConstant, SetSlot, LoadConstant , - SetSlot, LoadConstant, SetSlot, LoadConstant, SetSlot, RegisterTransfer, FunctionCall , - GetSlot, Label, RegisterTransfer, GetSlot, FunctionReturn] + @expect = [Label, GetSlot, GetSlot, SetSlot, LoadConstant, SetSlot, LoadConstant , + SetSlot, LoadConstant, SetSlot, LoadConstant, SetSlot, RegisterTransfer, FunctionCall , + Label, GetSlot, Label, RegisterTransfer, GetSlot, FunctionReturn] was = check set = was.next(7) assert_equal SetSlot , set.class diff --git a/test/compiler/statements/test_class.rb b/test/compiler/statements/test_class.rb index 34e05102..714bc6e1 100644 --- a/test/compiler/statements/test_class.rb +++ b/test/compiler/statements/test_class.rb @@ -34,9 +34,9 @@ class Object end end HERE - @expect = [Label, GetSlot, LoadConstant, SetSlot, LoadConstant, SetSlot, LoadConstant , - SetSlot, LoadConstant, SetSlot, RegisterTransfer, FunctionCall, GetSlot, SetSlot , - Label, RegisterTransfer, GetSlot, FunctionReturn] + @expect = [Label, GetSlot, LoadConstant, SetSlot, LoadConstant, SetSlot, LoadConstant , + SetSlot, LoadConstant, SetSlot, RegisterTransfer, FunctionCall, Label, GetSlot , + SetSlot, Label, RegisterTransfer, GetSlot, FunctionReturn] check end diff --git a/test/compiler/statements/test_return.rb b/test/compiler/statements/test_return.rb index 2f207d65..8bd96f2c 100644 --- a/test/compiler/statements/test_return.rb +++ b/test/compiler/statements/test_return.rb @@ -70,8 +70,8 @@ class Object end HERE @expect = [Label, GetSlot, GetSlot, SetSlot, LoadConstant, SetSlot, LoadConstant , - SetSlot, LoadConstant, SetSlot, RegisterTransfer, FunctionCall, GetSlot, SetSlot , - Label, RegisterTransfer, GetSlot, FunctionReturn] + SetSlot, LoadConstant, SetSlot, RegisterTransfer, FunctionCall, Label, GetSlot , + SetSlot, Label, RegisterTransfer, GetSlot, FunctionReturn] check end end diff --git a/test/interpreter/test_add.rb b/test/interpreter/test_add.rb index bfe50ed8..02947d99 100644 --- a/test/interpreter/test_add.rb +++ b/test/interpreter/test_add.rb @@ -30,16 +30,21 @@ class AddTest < MiniTest::Test assert @interpreter.get_register( :r2 ).is_a? Integer end def test_transfer - transfer = ticks 6 + transfer = ticks 8 assert_equal Register::RegisterTransfer , transfer.class assert_equal @interpreter.get_register(transfer.to) , @interpreter.get_register(transfer.from) end def test_call - assert_equal Register::FunctionCall , ticks(7).class - assert @interpreter.link + ret = ticks(18) + assert_equal Register::FunctionReturn , ret.class + + object = @interpreter.object_for( ret.register ) + link = object.internal_object_get( ret.index ) + + assert_equal Register::Label , link.class end def test_adding - done_op = ticks(12) + done_op = ticks(13) assert_equal Register::OperatorInstruction , done_op.class left = @interpreter.get_register(done_op.left) rr = done_op.right @@ -57,9 +62,10 @@ class AddTest < MiniTest::Test def test_chain #show_ticks # get output of what is ["Branch","Label","LoadConstant","GetSlot","SetSlot", - "RegisterTransfer","FunctionCall","Label","SaveReturn","LoadConstant", - "LoadConstant","OperatorInstruction","SetSlot","Label","RegisterTransfer", - "GetSlot","FunctionReturn","RegisterTransfer","Syscall","NilClass"].each_with_index do |name , index| + "LoadConstant","SetSlot","RegisterTransfer","FunctionCall","Label", + "LoadConstant","LoadConstant","OperatorInstruction","SetSlot","Label", + "RegisterTransfer","GetSlot","FunctionReturn","RegisterTransfer","Syscall", + "NilClass"].each_with_index do |name , index| got = ticks(1) assert got.class.name.index(name) , "Wrong class for #{index+1}, expect #{name} , got #{got}" end diff --git a/test/interpreter/test_if.rb b/test/interpreter/test_if.rb index 8a1b85fa..75494de6 100644 --- a/test/interpreter/test_if.rb +++ b/test/interpreter/test_if.rb @@ -26,24 +26,22 @@ HERE #puts parts.inspect Soml.compile( parts ) machine.collect - # statements = Register.machine.boot.parse_and_compile @string_input - # Soml::Compiler.compile( statements , Register.machine.space.get_main ) @interpreter = Interpreter::Interpreter.new @interpreter.start Register.machine.init #show_ticks # get output of what is ["Branch","Label","LoadConstant","GetSlot","SetSlot", - "RegisterTransfer","FunctionCall","Label","SaveReturn","GetSlot", - "GetSlot","SetSlot","LoadConstant","SetSlot","LoadConstant", - "SetSlot","LoadConstant","SetSlot","RegisterTransfer","FunctionCall", - "Label","SaveReturn","GetSlot","LoadConstant","OperatorInstruction", - "IsZero","GetSlot","LoadConstant","SetSlot","LoadConstant", - "SetSlot","LoadConstant","SetSlot","RegisterTransfer","FunctionCall", - "Label","SaveReturn","GetSlot","RegisterTransfer","Syscall", - "RegisterTransfer","RegisterTransfer","SetSlot","Label","RegisterTransfer", - "GetSlot","FunctionReturn","GetSlot","Branch","Label", - "Label","RegisterTransfer","GetSlot","FunctionReturn","GetSlot", - "Label","RegisterTransfer","GetSlot","FunctionReturn","RegisterTransfer", - "Syscall","NilClass"].each_with_index do |name , index| + "LoadConstant","SetSlot","RegisterTransfer","FunctionCall","Label", + "GetSlot","GetSlot","SetSlot","LoadConstant","SetSlot", + "LoadConstant","SetSlot","LoadConstant","SetSlot","LoadConstant", + "SetSlot","RegisterTransfer","FunctionCall","Label","GetSlot", + "LoadConstant","OperatorInstruction","IsZero","GetSlot","LoadConstant", + "SetSlot","LoadConstant","SetSlot","LoadConstant","SetSlot", + "LoadConstant","SetSlot","RegisterTransfer","FunctionCall","Label", + "GetSlot","RegisterTransfer","Syscall","RegisterTransfer","RegisterTransfer", + "SetSlot","Label","RegisterTransfer","GetSlot","FunctionReturn", + "GetSlot","Branch","Label","Label","RegisterTransfer", + "GetSlot","FunctionReturn","GetSlot","Label","RegisterTransfer", + "GetSlot","FunctionReturn","RegisterTransfer","Syscall","NilClass"].each_with_index do |name , index| got = ticks(1) assert got.class.name.index(name) , "Wrong class for #{index+1}, expect #{name} , got #{got}" end diff --git a/test/interpreter/test_puti.rb b/test/interpreter/test_puti.rb index 3100430d..64ca186e 100644 --- a/test/interpreter/test_puti.rb +++ b/test/interpreter/test_puti.rb @@ -54,39 +54,38 @@ HERE #puts parts.inspect Soml.compile( parts ) machine.collect -# statements = Register.machine.boot.parse_and_compile @string_input -# Soml::Compiler.compile( statements , Register.machine.space.get_main ) @interpreter = Interpreter::Interpreter.new @interpreter.start Register.machine.init #show_ticks # get output of what is ["Branch","Label","LoadConstant","GetSlot","SetSlot", - "RegisterTransfer","FunctionCall","Label","SaveReturn","GetSlot", - "LoadConstant","SetSlot","LoadConstant","SetSlot","LoadConstant", - "SetSlot","RegisterTransfer","FunctionCall","Label","SaveReturn", - "LoadConstant","GetSlot","SetSlot","GetSlot","GetSlot", - "SetSlot","LoadConstant","SetSlot","LoadConstant","SetSlot", - "GetSlot","GetSlot","SetSlot","RegisterTransfer","FunctionCall", - "Label","SaveReturn","GetSlot","LoadConstant","OperatorInstruction", - "GetSlot","SetSlot","GetSlot","GetSlot","GetSlot", - "OperatorInstruction","GetSlot","SetSlot","GetSlot","GetSlot", - "IsNotzero","Label","GetSlot","GetSlot","SetSlot", - "LoadConstant","SetSlot","LoadConstant","SetSlot","GetSlot", - "GetSlot","SetSlot","RegisterTransfer","FunctionCall","Label", - "SaveReturn","GetSlot","LoadConstant","OperatorInstruction","IsZero", - "Branch","Label","GetSlot","LoadConstant","OperatorInstruction", + "LoadConstant","SetSlot","RegisterTransfer","FunctionCall","Label", + "GetSlot","LoadConstant","SetSlot","LoadConstant","SetSlot", + "LoadConstant","SetSlot","LoadConstant","SetSlot","RegisterTransfer", + "FunctionCall","Label","LoadConstant","GetSlot","SetSlot", + "GetSlot","GetSlot","SetSlot","LoadConstant","SetSlot", + "LoadConstant","SetSlot","GetSlot","GetSlot","SetSlot", + "LoadConstant","SetSlot","RegisterTransfer","FunctionCall","Label", + "GetSlot","LoadConstant","OperatorInstruction","GetSlot","SetSlot", + "GetSlot","GetSlot","GetSlot","OperatorInstruction","GetSlot", + "SetSlot","GetSlot","GetSlot","IsNotzero","Label", + "GetSlot","GetSlot","SetSlot","LoadConstant","SetSlot", + "LoadConstant","SetSlot","GetSlot","GetSlot","SetSlot", + "LoadConstant","SetSlot","RegisterTransfer","FunctionCall","Label", + "GetSlot","LoadConstant","OperatorInstruction","IsZero","Branch", + "Label","GetSlot","LoadConstant","OperatorInstruction","IsZero", + "Label","LoadConstant","SetSlot","Label","GetSlot", + "LoadConstant","OperatorInstruction","IsZero","Label","LoadConstant", + "SetSlot","Label","GetSlot","LoadConstant","OperatorInstruction", "IsZero","Label","LoadConstant","SetSlot","Label", "GetSlot","LoadConstant","OperatorInstruction","IsZero","Label", - "LoadConstant","SetSlot","Label","GetSlot","LoadConstant", - "OperatorInstruction","IsZero","Label","LoadConstant","SetSlot", - "Label","GetSlot","LoadConstant","OperatorInstruction","IsZero", - "Label","LoadConstant","SetSlot","Label","Label", - "RegisterTransfer","GetSlot","FunctionReturn","GetSlot","GetSlot", - "SetSlot","GetSlot","GetSlot","GetSlot","OperatorInstruction", - "SetSlot","Label","GetSlot","SetSlot","Label", - "RegisterTransfer","GetSlot","FunctionReturn","GetSlot","SetSlot", - "Label","RegisterTransfer","GetSlot","FunctionReturn","GetSlot", - "Label","RegisterTransfer","GetSlot","FunctionReturn","RegisterTransfer", - "Syscall","NilClass"].each_with_index do |name , index| + "LoadConstant","SetSlot","Label","Label","RegisterTransfer", + "GetSlot","FunctionReturn","GetSlot","GetSlot","SetSlot", + "GetSlot","GetSlot","GetSlot","OperatorInstruction","SetSlot", + "Label","GetSlot","SetSlot","Label","RegisterTransfer", + "GetSlot","FunctionReturn","GetSlot","SetSlot","Label", + "RegisterTransfer","GetSlot","FunctionReturn","GetSlot","Label", + "RegisterTransfer","GetSlot","FunctionReturn","RegisterTransfer","Syscall", + "NilClass"].each_with_index do |name , index| got = ticks(1) assert got.class.name.index(name) , "Wrong class for #{index+1}, expect #{name} , got #{got}" end diff --git a/test/interpreter/test_puts.rb b/test/interpreter/test_puts.rb index f0835da5..7b4c88d5 100644 --- a/test/interpreter/test_puts.rb +++ b/test/interpreter/test_puts.rb @@ -41,30 +41,24 @@ class TestPuts < MiniTest::Test assert @interpreter.get_register( :r1 ).is_a? Integer end def test_transfer - transfer = ticks 6 + transfer = ticks 8 assert_equal Register::RegisterTransfer , transfer.class assert_equal @interpreter.get_register(transfer.to) , @interpreter.get_register(transfer.from) end def test_call - assert_equal Register::FunctionCall , ticks(7).class - assert @interpreter.link - end - def test_save - done = ticks(9) - assert_equal Register::SaveReturn , done.class - assert @interpreter.get_register done.register.symbol + assert_equal Register::FunctionCall , ticks(9).class end def test_chain #show_ticks # get output of what is - [ "Branch","Label","LoadConstant","GetSlot","SetSlot", - "RegisterTransfer","FunctionCall","Label","SaveReturn","GetSlot", - "LoadConstant","SetSlot","LoadConstant","SetSlot","LoadConstant", - "SetSlot","RegisterTransfer","FunctionCall","Label","SaveReturn", - "GetSlot","RegisterTransfer","Syscall","RegisterTransfer","RegisterTransfer", - "SetSlot","Label","RegisterTransfer","GetSlot","FunctionReturn", - "GetSlot","Label","RegisterTransfer","GetSlot","FunctionReturn", - "RegisterTransfer","Syscall","NilClass"].each_with_index do |name , index| + ["Branch","Label","LoadConstant","GetSlot","SetSlot", + "LoadConstant","SetSlot","RegisterTransfer","FunctionCall","Label", + "GetSlot","LoadConstant","SetSlot","LoadConstant","SetSlot", + "LoadConstant","SetSlot","LoadConstant","SetSlot","RegisterTransfer", + "FunctionCall","Label","GetSlot","RegisterTransfer","Syscall", + "RegisterTransfer","RegisterTransfer","SetSlot","Label","RegisterTransfer", + "GetSlot","FunctionReturn","GetSlot","Label","RegisterTransfer", + "GetSlot","FunctionReturn","RegisterTransfer","Syscall","NilClass"].each_with_index do |name , index| got = ticks(1) #puts "TICK #{index}" assert got.class.name.index(name) , "Wrong class for #{index+1}, expect #{name} , got #{got}" @@ -72,20 +66,20 @@ class TestPuts < MiniTest::Test end def test_putstring - done = ticks(23) + done = ticks(25) assert_equal Register::Syscall , done.class assert_equal "Hello again" , @interpreter.stdout end def test_return - done = ticks(30) + done = ticks(32) assert_equal Register::FunctionReturn , done.class assert Register::Label , @interpreter.instruction.class assert @interpreter.instruction.is_a?(Register::Instruction) , "not instruction #{@interpreter.instruction}" end def test_exit - done = ticks(38) + done = ticks(40) assert_equal NilClass , done.class assert_equal "Hello again" , @interpreter.stdout end