diff --git a/test/typed/method_compiler/test_assignment.rb b/test/typed/method_compiler/test_assignment.rb index 9ffdb505..d7635525 100644 --- a/test/typed/method_compiler/test_assignment.rb +++ b/test/typed/method_compiler/test_assignment.rb @@ -9,17 +9,18 @@ module Register @input = s(:statements, s(:assignment, s(:name, :r), s(:operator_value, :+, s(:int, 10), s(:int, 1)))) - @expect = [Label, LoadConstant, LoadConstant, OperatorInstruction, SlotToReg, RegToSlot, Label , - FunctionReturn] - check + @expect = [Label, LoadConstant, LoadConstant, OperatorInstruction, SlotToReg, RegToSlot , + LoadConstant, SlotToReg, RegToSlot, Label, FunctionReturn] + assert_nil msg = check_nil , msg end def test_assign_local Parfait.object_space.get_main.add_local(:r , :Integer) @input =s(:statements, s(:assignment, s(:name, :r), s(:int, 5))) - @expect = [Label, LoadConstant, SlotToReg, RegToSlot, Label, FunctionReturn] - check + @expect = [Label, LoadConstant, SlotToReg, RegToSlot, LoadConstant, SlotToReg , + RegToSlot, Label, FunctionReturn] + assert_nil msg = check_nil , msg end def test_assign_local_assign @@ -27,26 +28,27 @@ module Register @input = s(:statements, s(:assignment, s(:name, :r), s(:int, 5))) - @expect = [Label, LoadConstant, SlotToReg, RegToSlot, Label, FunctionReturn] - check + @expect = [Label, LoadConstant, SlotToReg, RegToSlot, LoadConstant, SlotToReg , + RegToSlot, Label, FunctionReturn] + assert_nil msg = check_nil , msg end def test_assign_call Parfait.object_space.get_main.add_local(:r , :Integer) @input = s(:statements, s(:assignment, s(:name, :r), s(:call, s(:name, :main), s(:arguments)))) - @expect = [Label, SlotToReg, SlotToReg, RegToSlot, LoadConstant, RegToSlot, LoadConstant , - SlotToReg, SlotToReg, RegToSlot, LoadConstant, RegToSlot, RegisterTransfer, FunctionCall , - Label, RegisterTransfer, SlotToReg, SlotToReg, SlotToReg, RegToSlot, Label , - FunctionReturn] - check + @expect = [Label, SlotToReg, SlotToReg, RegToSlot, LoadConstant, RegToSlot , + LoadConstant, SlotToReg, RegToSlot, LoadConstant, RegToSlot, RegisterTransfer , + FunctionCall, Label, RegisterTransfer, SlotToReg, SlotToReg, SlotToReg , + RegToSlot, LoadConstant, SlotToReg, RegToSlot, Label, FunctionReturn] + assert_nil msg = check_nil , msg end def test_named_list_get Parfait.object_space.get_main.add_local(:r , :Integer) @input = s(:statements, s(:assignment, s(:name, :r), s(:int, 5)), s(:return, s(:name, :r))) - @expect = [Label, LoadConstant, SlotToReg, RegToSlot, SlotToReg, SlotToReg, RegToSlot , - Label, FunctionReturn] - was = check + @expect = [Label, LoadConstant, SlotToReg, RegToSlot, SlotToReg, SlotToReg , + RegToSlot, LoadConstant, SlotToReg, RegToSlot, Label, FunctionReturn] + was = check_return get = was.next(5) assert_equal SlotToReg , get.class assert_equal 1 + 1, get.index , "Get to named_list index must be offset, not #{get.index}" @@ -55,8 +57,9 @@ module Register def test_assign_local_int Parfait.object_space.get_main.add_local(:r , :Integer) @input = s(:statements, s(:assignment, s(:name, :r), s(:int, 5)) ) - @expect = [Label, LoadConstant, SlotToReg, RegToSlot, Label, FunctionReturn] - was = check + @expect = [Label, LoadConstant, SlotToReg, RegToSlot, LoadConstant, SlotToReg , + RegToSlot, Label, FunctionReturn] + was = check_return set = was.next(3) assert_equal RegToSlot , set.class assert_equal 1 + 1, set.index , "Set to named_list index must be offset, not #{set.index}" @@ -72,8 +75,9 @@ module Register def test_assign_arg Parfait.object_space.get_main.add_argument(:blar , :Integer) @input = s(:statements, s(:assignment, s(:name, :blar), s(:int, 5))) - @expect = [Label, LoadConstant, SlotToReg, RegToSlot, Label, FunctionReturn] - was = check + @expect = [Label, LoadConstant, SlotToReg, RegToSlot, LoadConstant, SlotToReg , + RegToSlot, Label, FunctionReturn] + was = check_return set = was.next(3) assert_equal RegToSlot , set.class assert_equal 1 + 1, set.index , "Set to args index must be offset, not #{set.index}" @@ -90,8 +94,9 @@ module Register # have to define bar externally, just because redefining main. Otherwise that would be automatic Parfait.object_space.get_main.add_argument(:balr , :Integer) @input = s(:statements, s(:return, s(:name, :balr))) - @expect = [Label, SlotToReg, SlotToReg, RegToSlot, Label, FunctionReturn] - was = check + @expect = [Label, SlotToReg, SlotToReg, RegToSlot, LoadConstant, SlotToReg , + RegToSlot, Label, FunctionReturn] + was = check_return get = was.next(2) assert_equal SlotToReg , get.class assert_equal 1 + 1, get.index , "Get to args index must be offset, not #{get.index}" diff --git a/test/typed/method_compiler/test_call_site.rb b/test/typed/method_compiler/test_call_site.rb index 05513efe..e0881465 100644 --- a/test/typed/method_compiler/test_call_site.rb +++ b/test/typed/method_compiler/test_call_site.rb @@ -9,9 +9,10 @@ module Register clean_compile :Integer, :puti, {}, s(:statements, s(:return, s(:int, 1))) @input = s(:call, s(:name, :puti), s(:arguments), s(:receiver, s(:int, 42))) @expect = [Label, SlotToReg, LoadConstant, RegToSlot, LoadConstant, RegToSlot, LoadConstant , - SlotToReg, SlotToReg, RegToSlot, LoadConstant, RegToSlot, RegisterTransfer, FunctionCall , - Label, RegisterTransfer, SlotToReg, SlotToReg, Label, FunctionReturn] - check + SlotToReg, RegToSlot, LoadConstant, RegToSlot, RegisterTransfer, FunctionCall, Label , + RegisterTransfer, SlotToReg, SlotToReg, LoadConstant, SlotToReg, RegToSlot, Label , + FunctionReturn] + assert_nil msg = check_nil , msg end @@ -19,22 +20,23 @@ module Register clean_compile :Word, :putstr,{}, s(:statements, s(:return, s(:int, 1))) @input =s(:call, s(:name, :putstr), s(:arguments), s(:receiver, s(:string, "Hello"))) - @expect = [Label, SlotToReg, LoadConstant, RegToSlot, LoadConstant, RegToSlot, LoadConstant , - SlotToReg, SlotToReg, RegToSlot, LoadConstant, RegToSlot, RegisterTransfer, FunctionCall , - Label, RegisterTransfer, SlotToReg, SlotToReg, Label, FunctionReturn] - check + @expect = [Label, SlotToReg, LoadConstant, RegToSlot, LoadConstant, RegToSlot, LoadConstant , + SlotToReg, RegToSlot, LoadConstant, RegToSlot, RegisterTransfer, FunctionCall, Label , + RegisterTransfer, SlotToReg, SlotToReg, LoadConstant, SlotToReg, RegToSlot, Label , + FunctionReturn] + assert_nil msg = check_nil , msg end - def _test_call_local_int + def test_call_local_int Parfait.object_space.get_main.add_local(:testi , :Integer) clean_compile :Integer, :putint, {}, s(:statements, s(:return, s(:int, 1))) @input = s(:statements, s(:assignment, s(:name, :testi), s(:int, 20)), s(:call, s(:name, :putint), s(:arguments), s(:receiver, s(:name, :testi)))) @expect = [Label, LoadConstant, SlotToReg, RegToSlot, SlotToReg, SlotToReg, SlotToReg , - RegToSlot, LoadConstant, RegToSlot, LoadConstant, RegToSlot, LoadConstant, RegToSlot , - RegisterTransfer, FunctionCall, Label, RegisterTransfer, SlotToReg, SlotToReg, Label , - FunctionReturn] - check + RegToSlot, LoadConstant, RegToSlot, LoadConstant, SlotToReg, RegToSlot, LoadConstant , + RegToSlot, RegisterTransfer, FunctionCall, Label, RegisterTransfer, SlotToReg, SlotToReg , + LoadConstant, SlotToReg, RegToSlot, Label, FunctionReturn] + assert_nil msg = check_nil , msg end def test_call_local_class @@ -42,30 +44,25 @@ module Register clean_compile :List, :add, {}, s(:statements, s(:return, s(:int, 1))) @input =s(:statements, s(:call, s(:name, :add), s(:arguments), s(:receiver, s(:name, :test_l)))) - @expect = [Label, SlotToReg, SlotToReg, SlotToReg, RegToSlot, LoadConstant, RegToSlot , - LoadConstant, SlotToReg, SlotToReg, RegToSlot, LoadConstant, RegToSlot, RegisterTransfer , - FunctionCall, Label, RegisterTransfer, SlotToReg, SlotToReg, Label, FunctionReturn] - check + @expect = [Label, SlotToReg, SlotToReg, SlotToReg, RegToSlot, LoadConstant, RegToSlot , + LoadConstant, SlotToReg, RegToSlot, LoadConstant, RegToSlot, RegisterTransfer, FunctionCall , + Label, RegisterTransfer, SlotToReg, SlotToReg, LoadConstant, SlotToReg, RegToSlot , + Label, FunctionReturn] + assert_nil msg = check_nil , msg end - def _test_call_puts - @input = <