33ffcf1d88
rather make resolve an instruction. Since it was coded in risc anyway, we not only save the setup and call But also makes the mom instruction flow clearer The method really came from not wanting to code it in risc, but with the Builder, that is now surprisingly painless
35 lines
935 B
Ruby
35 lines
935 B
Ruby
require_relative "../helper"
|
|
|
|
module Vool
|
|
class TestSendCachedSimpleMom < MiniTest::Test
|
|
include MomCompile
|
|
include Mom
|
|
|
|
def setup
|
|
Risc.machine.boot
|
|
@ins = compile_first_method( "a = 5; a.mod4")
|
|
end
|
|
def test_check_type
|
|
assert_equal NotSameCheck , @ins.next.class , @ins
|
|
end
|
|
def test_type_update
|
|
load = @ins.next(2)
|
|
assert_equal :message , load.right.known_object , load
|
|
assert_equal :receiver , load.right.slots[0] , load
|
|
assert_equal :type , load.right.slots[1] , load
|
|
end
|
|
def test_check_resolve_call
|
|
assert_equal ResolveMethod , @ins.next(3).class , @ins
|
|
end
|
|
def test_dynamic_call_last
|
|
assert_equal DynamicCall , @ins.last.class , @ins
|
|
end
|
|
|
|
def test_array
|
|
check_array [SlotLoad, NotSameCheck, SlotLoad, ResolveMethod, Label, MessageSetup ,
|
|
ArgumentTransfer, DynamicCall] , @ins
|
|
end
|
|
|
|
end
|
|
end
|