From d2fba19b95a0b18b70ae9154993fb9d260127079 Mon Sep 17 00:00:00 2001 From: Torsten Ruger Date: Sun, 16 Apr 2017 11:39:21 +0300 Subject: [PATCH] fixes simple argument passing --- lib/vool/statements/send_statement.rb | 3 +- test/vool/to_mom/send/test_send_simple.rb | 37 ++++++++++++++ .../vool/to_mom/send/test_send_simple_args.rb | 49 +++++++++++++++++++ test/vool/to_mom/test_send.rb | 39 +-------------- 4 files changed, 89 insertions(+), 39 deletions(-) create mode 100644 test/vool/to_mom/send/test_send_simple.rb create mode 100644 test/vool/to_mom/send/test_send_simple_args.rb diff --git a/lib/vool/statements/send_statement.rb b/lib/vool/statements/send_statement.rb index a9900fe3..be3ba23f 100644 --- a/lib/vool/statements/send_statement.rb +++ b/lib/vool/statements/send_statement.rb @@ -10,7 +10,6 @@ module Vool def collect(arr) @receiver.collect(arr) @arguments.each do |arg| - puts "ARG#{arg}" arg.collect(arr) end super @@ -42,7 +41,7 @@ module Vool pops = [Mom::SlotConstant.new([:message , :next_message , :receiver] , @receiver) ] @arguments.each_with_index do |arg , index| arg_target = [:message , :next_message , :arguments] - pops << Mom::SlotConstant.new( arg_target + index , @arg) + pops << Mom::SlotConstant.new( arg_target << index , arg) end pops end diff --git a/test/vool/to_mom/send/test_send_simple.rb b/test/vool/to_mom/send/test_send_simple.rb new file mode 100644 index 00000000..2d1d3cb3 --- /dev/null +++ b/test/vool/to_mom/send/test_send_simple.rb @@ -0,0 +1,37 @@ +require_relative "../helper" + +module Vool + class TestSendMom < MiniTest::Test + include MomCompile + + def setup + Risc.machine.boot + @stats = compile_first_method( "5.mod4").first + end + + def test_class_compiles + assert_equal Mom::SlotConstant , @stats.first.class , @stats + end + def test_slot_is_set + assert @stats.first.left + end + def test_two_instructions_are_returned + assert_equal 2 , @stats.length + end + def test_receiver_class + assert_equal Mom::SlotConstant, @stats.first.class + end + def test_receiver_move + assert_equal :receiver, @stats.first.left[2] + end + def test_call_is + assert_equal Mom::SimpleCall, @stats[1].class + end + def test_call_has_method + assert_equal Parfait::TypedMethod, @stats[1].method.class + end + def test_call_has_right_method + assert_equal :mod4, @stats[1].method.name + end + end +end diff --git a/test/vool/to_mom/send/test_send_simple_args.rb b/test/vool/to_mom/send/test_send_simple_args.rb new file mode 100644 index 00000000..2d727770 --- /dev/null +++ b/test/vool/to_mom/send/test_send_simple_args.rb @@ -0,0 +1,49 @@ +require_relative "../helper" + +module Vool + class TestSendSimpleArgsMom < MiniTest::Test + include MomCompile + + def setup + Risc.machine.boot + @stats = compile_first_method( "5.mod4(1,2)").first + end + + def test_class_compiles + assert_equal Mom::SlotConstant , @stats.first.class , @stats + end + def test_four_instructions_are_returned + assert_equal 4 , @stats.length + end + def test_receiver_class + assert_equal Mom::SlotConstant, @stats.first.class + end + def test_receiver_move + assert_equal :receiver, @stats[0].left[2] + end + def test_args_one_move + assert_equal :next_message, @stats[1].left[1] + assert_equal :arguments, @stats[1].left[2] + end + def test_args_one_int + assert_equal IntegerStatement, @stats[1].right.class + assert_equal 1, @stats[1].right.value + end + def test_args_two_move + assert_equal :arguments, @stats[2].left[2] + end + def test_args_two_int + assert_equal IntegerStatement, @stats[2].right.class + assert_equal 2, @stats[2].right.value + end + def test_call_is + assert_equal Mom::SimpleCall, @stats[3].class + end + def test_call_has_method + assert_equal Parfait::TypedMethod , @stats[3].method.class + end + def test_call_has_right_method + assert_equal :mod4, @stats[3].method.name + end + end +end diff --git a/test/vool/to_mom/test_send.rb b/test/vool/to_mom/test_send.rb index 0c130321..f5e5a5bc 100644 --- a/test/vool/to_mom/test_send.rb +++ b/test/vool/to_mom/test_send.rb @@ -1,37 +1,2 @@ -require_relative "helper" - -module Vool - class TestSendMom < MiniTest::Test - include MomCompile - - def setup - Risc.machine.boot - @stats = compile_first_method( "5.mod4").first - end - - def test_class_compiles - assert_equal Mom::SlotConstant , @stats.first.class , @stats - end - def test_slot_is_set - assert @stats.first.left - end - def test_two_instructions_are_returned - assert_equal 2 , @stats.length - end - def test_receiver_class - assert_equal Mom::SlotConstant, @stats.first.class - end - def test_receiver_move - assert_equal :receiver, @stats.first.left[2] - end - def test_call_is - assert_equal Mom::SimpleCall, @stats[1].class - end - def test_call_has_method - assert_equal Parfait::TypedMethod, @stats[1].method.class - end - def test_call_has_right_method - assert_equal :mod4, @stats[1].method.name - end - end -end +require_relative "send/test_send_simple" +require_relative "send/test_send_simple_args"