simple send test works again
This commit is contained in:
parent
9b4fcf0e0f
commit
1def69c783
@ -42,6 +42,7 @@ module Common
|
||||
# so append the given code to the linked list at the end
|
||||
def append( code )
|
||||
last.set_next code
|
||||
self
|
||||
end
|
||||
alias :<< :append
|
||||
|
||||
|
@ -46,12 +46,12 @@ module Vool
|
||||
end
|
||||
|
||||
def message_setup(in_method)
|
||||
setup = [Mom::MessageSetup.new(in_method)]
|
||||
receiver = @receiver.slot_class.new([:message , :next_message , :receiver] , @receiver.to_mom(in_method))
|
||||
setup = Mom::MessageSetup.new(in_method) <<
|
||||
Mom::SlotLoad.new([:message , :next_message , :receiver] , @receiver.slot_definition(in_method))
|
||||
arg_target = [:message , :next_message , :arguments]
|
||||
args = []
|
||||
@arguments.each_with_index do |arg , index|
|
||||
args << arg.slot_class.new( arg_target + [index] , arg.to_mom(in_method))
|
||||
args << Mom::SlotLoad.new( arg_target + [index] , arg.slot_definition(in_method))
|
||||
end
|
||||
setup << Mom::ArgumentTransfer.new( receiver , args )
|
||||
end
|
||||
|
@ -50,8 +50,14 @@ module Vool
|
||||
@statements.each{|a| a.each(&block)}
|
||||
end
|
||||
|
||||
def normalize
|
||||
Statements.new(@statements.collect{|s| s.normalize})
|
||||
end
|
||||
end
|
||||
|
||||
class ScopeStatement < Statements
|
||||
def normalize
|
||||
ScopeStatement.new(@statements.collect{|s| s.normalize})
|
||||
end
|
||||
end
|
||||
end
|
||||
|
@ -1,31 +1,31 @@
|
||||
module Vool
|
||||
# relies on @stats and receiver_type method
|
||||
# relies on @ins and receiver_type method
|
||||
module SimpleSendHarness
|
||||
def test_compiles_not_array
|
||||
assert Array != @stats.class , @stats
|
||||
assert Array != @ins.class , @ins
|
||||
end
|
||||
def test_class_compiles
|
||||
assert_equal Mom::MessageSetup , @stats.class , @stats
|
||||
assert_equal Mom::MessageSetup , @ins.class , @ins
|
||||
end
|
||||
def test_two_instructions_are_returned
|
||||
assert_equal 3 , @stats.length , @stats.to_rxf
|
||||
assert_equal 4 , @ins.length , @ins
|
||||
end
|
||||
def test_receiver_move_class
|
||||
assert_equal Mom::ArgumentTransfer, @stats[1].class
|
||||
assert_equal Mom::ArgumentTransfer, @ins.next(2).class
|
||||
end
|
||||
def test_receiver_move
|
||||
assert_equal :receiver, @stats[1].receiver.left.slots[1]
|
||||
assert_equal :receiver, @ins.next(1).left.slots[1]
|
||||
end
|
||||
def test_receiver
|
||||
type , value = receiver
|
||||
assert_equal type, @stats[1].receiver.right.class
|
||||
assert_equal value, @stats[1].receiver.right.value
|
||||
assert_equal type, @ins.next.right.class
|
||||
assert_equal value, @ins.next.right.value
|
||||
end
|
||||
def test_call_is
|
||||
assert_equal Mom::SimpleCall, @stats[2].class
|
||||
assert_equal Mom::SimpleCall, @ins.next(3).class
|
||||
end
|
||||
def test_call_has_method
|
||||
assert_equal Parfait::TypedMethod, @stats[2].method.class
|
||||
assert_equal Parfait::TypedMethod, @ins.next(3).method.class
|
||||
end
|
||||
end
|
||||
end
|
||||
|
@ -8,22 +8,22 @@ module Vool
|
||||
|
||||
def setup
|
||||
Risc.machine.boot
|
||||
@stats = compile_first_method( "5.mod4(1,2)").first
|
||||
@ins = compile_first_method( "5.mod4(1,2)")
|
||||
end
|
||||
|
||||
def receiver
|
||||
[Mom::IntegerConstant , 5]
|
||||
end
|
||||
def test_args_two_move
|
||||
assert_equal :next_message, @stats[1].arguments[1].left.slots[0]
|
||||
assert_equal :arguments, @stats[1].arguments[1].left.slots[1]
|
||||
assert_equal :next_message, @ins.next(2).arguments[1].left.slots[0]
|
||||
assert_equal :arguments, @ins.next(2).arguments[1].left.slots[1]
|
||||
end
|
||||
def test_args_two_str
|
||||
assert_equal Mom::IntegerConstant, @stats[1].arguments[1].right.class
|
||||
assert_equal 2, @stats[1].arguments[1].right.value
|
||||
assert_equal Mom::IntegerConstant, @ins.next(2).arguments[1].right.class
|
||||
assert_equal 2, @ins.next(2).arguments[1].right.value
|
||||
end
|
||||
def test_array
|
||||
check_array [MessageSetup,ArgumentTransfer,SimpleCall] , @stats
|
||||
check_array [Mom::MessageSetup,Mom::SlotLoad,Mom::ArgumentTransfer,Mom::SimpleCall] , @ins
|
||||
end
|
||||
end
|
||||
end
|
||||
|
@ -7,27 +7,26 @@ module Vool
|
||||
|
||||
def setup
|
||||
Risc.machine.boot
|
||||
@stats = compile_first_method( "if(@a) ; 5.mod4 ; else; 4.mod4 ; end")
|
||||
@first = @stats.first
|
||||
@ins = compile_first_method( "if(@a) ; 5.mod4 ; else; 4.mod4 ; end")
|
||||
end
|
||||
|
||||
def test_compiles_not_array
|
||||
assert Array != @stats.class , @stats
|
||||
assert Array != @ins.class , @ins
|
||||
end
|
||||
def test_if_compiles_as_array
|
||||
assert_equal Mom::IfStatement , @first.class , @stats
|
||||
assert_equal Mom::IfStatement , @ins.class , @ins
|
||||
end
|
||||
def test_condition_compiles_to_check
|
||||
assert_equal Mom::TruthCheck , @first.condition.class , @stats
|
||||
assert_equal Mom::TruthCheck , @ins.condition.class , @ins
|
||||
end
|
||||
def test_condition_is_slot
|
||||
assert_equal Mom::SlotDefinition , @first.condition.condition.class , @stats
|
||||
assert_equal Mom::SlotDefinition , @ins.condition.condition.class , @ins
|
||||
end
|
||||
def test_nothing_hoisted
|
||||
assert_nil @first.hoisted , @stats
|
||||
assert_nil @ins.hoisted , @ins
|
||||
end
|
||||
def test_array
|
||||
check_array [SlotLoad,TruthCheck,Label,MessageSetup,ArgumentTransfer,SimpleCall,Label], @stats
|
||||
check_array [SlotLoad,TruthCheck,Label,MessageSetup,ArgumentTransfer,SimpleCall,Label], @ins
|
||||
end
|
||||
end
|
||||
end
|
||||
|
Loading…
Reference in New Issue
Block a user