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