From be1481ce347f3b7e46c7f8ef94aa65c961e84f2a Mon Sep 17 00:00:00 2001 From: Torsten Ruger Date: Tue, 12 Sep 2017 17:49:42 +0300 Subject: [PATCH] some renaming, start on cached cached stalled for now, continue down to rise with what is first --- lib/vool/statements/send_statement.rb | 20 ++++----- .../to_mom/send/test_send_cached_simple.rb | 45 +++++++++++++++++++ 2 files changed, 55 insertions(+), 10 deletions(-) create mode 100644 test/vool/to_mom/send/test_send_cached_simple.rb diff --git a/lib/vool/statements/send_statement.rb b/lib/vool/statements/send_statement.rb index d6750374..7af19a23 100644 --- a/lib/vool/statements/send_statement.rb +++ b/lib/vool/statements/send_statement.rb @@ -33,16 +33,16 @@ module Vool # FIXME: we now presume direct (assignable) values for the arguments and receiver. # in a not so distant future, temporary variables will have to be created # and complex statements hoisted to assign to them. pps: same as in conditions - def to_mom( method ) + def to_mom( in_method ) if(@receiver.ct_type) - simple_call(method) + simple_call(in_method) else - cached_call(method) + cached_call(in_method) end end - def message_setup(method) - setup = [Mom::MessageSetup.new(method)] + def message_setup(in_method) + setup = [Mom::MessageSetup.new(in_method)] receiver = @receiver.slot_class.new([:message , :next_message , :receiver] , @receiver) arg_target = [:message , :next_message , :arguments] args = [] @@ -52,16 +52,16 @@ module Vool setup << Mom::ArgumentTransfer.new( receiver , args ) end - def simple_call(method) + def simple_call(in_method) type = @receiver.ct_type - method = type.resolve_method(@name) - raise "No method #{@name} for #{type}" unless method - Mom::Statements.new( message_setup(method) << Mom::SimpleCall.new( method) ) + called_method = type.resolve_method(@name) + raise "No method #{@name} for #{type}" unless called_method + Mom::Statements.new( message_setup(in_method) << Mom::SimpleCall.new( called_method) ) end def cached_call(method) raise "Not implemented #{method}" - Mom::Statements.new( message_setup + call_instruction ) + Mom::Statements.new( message_setup(method) + call_instruction ) [@receiver.slot_class.new([:message , :next_message , :receiver] , @receiver) ] end diff --git a/test/vool/to_mom/send/test_send_cached_simple.rb b/test/vool/to_mom/send/test_send_cached_simple.rb new file mode 100644 index 00000000..0c00f16c --- /dev/null +++ b/test/vool/to_mom/send/test_send_cached_simple.rb @@ -0,0 +1,45 @@ +require_relative "../helper" + +module Vool + class TestSendCachedSimpleMom < MiniTest::Test + include MomCompile + + def setup + Risc.machine.boot + @stats = compile_first_method( "arg.mod4").first + @first = @stats.first + end + + def est_compiles_not_array + assert Array != @stats.class , @stats + end + def est_class_compiles + assert_equal Mom::SlotConstant , @first.class , @stats + end + def est_slot_is_set + assert @stats.first.left + end + def est_two_instructions_are_returned + assert_equal 2 , @stats.length + end + def est_receiver_move_class + assert_equal Mom::SlotConstant, @first.class + end + def est_receiver_move + assert_equal :receiver, @first.left[2] + end + def est_receiver + assert_equal IntegerStatement, @first.right.class + assert_equal 5, @stats.first.right.value + end + def est_call_is + assert_equal Mom::SimpleCall, @stats[1].class + end + def est_call_has_method + assert_equal Parfait::TypedMethod, @stats[1].method.class + end + def est_call_has_right_method + assert_equal :mod4, @stats[1].method.name + end + end +end