diff --git a/lib/risc/register_value.rb b/lib/risc/register_value.rb index 269d16bd..65dd71c4 100644 --- a/lib/risc/register_value.rb +++ b/lib/risc/register_value.rb @@ -192,7 +192,7 @@ module Risc right = right.to_reg() if(right.is_a?(RegisterSlot)) ret = Risc.op( "operator #{operator}" , operator , self , right , result) compiler.add_code(ret) if compiler - ret + ret.result end # just capture the values in an intermediary object (RegisterSlot) diff --git a/lib/slot_machine/macro/operator.rb b/lib/slot_machine/macro/operator.rb index 3ca6025f..66eeb3b7 100644 --- a/lib/slot_machine/macro/operator.rb +++ b/lib/slot_machine/macro/operator.rb @@ -13,8 +13,8 @@ module SlotMachine builder.build do integer = message[:receiver].reduce_int(false) integer_reg = message[:arg1].reduce_int(false) - integer.op operator , integer_reg - integer_tmp[Parfait::Integer.integer_index] << integer + result = integer.op operator , integer_reg + integer_tmp[Parfait::Integer.integer_index] << result message[:return_value] << integer_tmp end return compiler diff --git a/test/risc/test_register_value.rb b/test/risc/test_register_value.rb index a759b858..f5ea672a 100644 --- a/test/risc/test_register_value.rb +++ b/test/risc/test_register_value.rb @@ -51,11 +51,15 @@ module Risc assert_equal @r0 , message.register end def test_operator - ret = @r0.op :<< , @r1 + @r0.set_compiler( fake = SuperFakeCompiler.new) + result = @r0.op :<< , @r1 + ret = fake.code assert_operator ret , :<< , :message , "id_" , "op_<<_" end def test_operator_slot - ret = @r0.op :<< , @r1[:type] + @r0.set_compiler( fake = SuperFakeCompiler.new) + result = @r0.op :<< , @r1[:type] + ret = fake.code assert_operator ret , :<< , :message , "id_.type" , "op_<<_" end def test_byte_to_reg diff --git a/test/slot_machine/macro/test_operator.rb b/test/slot_machine/macro/test_operator.rb index a564b55c..5c7a6ce6 100644 --- a/test/slot_machine/macro/test_operator.rb +++ b/test/slot_machine/macro/test_operator.rb @@ -41,7 +41,7 @@ module SlotMachine assert_slot_to_reg s + 3 ,:message , 9 , "message.arg1" assert_slot_to_reg s + 4 , "message.arg1" , 2 , "message.arg1.data_1" assert_operator s + 5 , :| , "message.receiver.data_1" , "message.arg1.data_1" , "op_|_" - assert_reg_to_slot s + 6 , "message.receiver.data_1" , "id_factory_.next_object" , 2 + assert_reg_to_slot s + 6 , "op_|_" , "id_factory_.next_object" , 2 assert_reg_to_slot s + 7 , "id_factory_.next_object" , :message , 5 assert_slot_to_reg s + 8 ,:message , 5 , "message.return_value" assert_reg_to_slot s + 9 , "message.return_value" , :message , 5