always slot definitions in slot loads

This commit is contained in:
Torsten Ruger 2018-03-10 18:04:04 +05:30
parent bc5906fb83
commit dae17e0c18
7 changed files with 17 additions and 13 deletions

View File

@ -28,15 +28,17 @@ module Mom
class SlotLoad < Instruction
attr_reader :left , :right
def initialize(left , right)
left = SlotDefinition.new(left.shift , left) if left.is_a? Array
@left , @right = left , right
raise "right not SlotDefinition, #{left}" unless left.is_a? SlotDefinition
end
end
# A SlotConstant moves a constant into a know Slot.
# A SlotConstant moves a constant into a known Slot.
# Eg when you write a = 5 , the 5 becomes a constant, and so the right side
# the a is an instance variable on the current frame, and the frame is an instance
# of the current message, so the effect is something like message.frame.a = 5
# @left: See SlotLoad, and array of symbols
# @left: See SlotLoad, an array of symbols
# @right: A Constant from parse, ie an instance of classes in basc_value, like TrueStatement
class SlotConstant < SlotLoad
@ -47,6 +49,7 @@ module Mom
end
#SlotMove is a SlotLoad where the right side is a slot, just like the left.
class SlotMove < SlotLoad
end

View File

@ -14,7 +14,7 @@ module Vool
assert_equal Mom::ArgumentTransfer, @stats[1].class
end
def test_receiver_move
assert_equal :receiver, @stats[1].receiver.left[2]
assert_equal :receiver, @stats[1].receiver.left.slots[1]
end
def test_receiver
type , value = receiver

View File

@ -44,7 +44,8 @@ module Vool
end
def test_call_third
assert @fourth.method_var_name.start_with?("cached_") , @fourth.to_rxf
assert @fourth.cached_method.start_with?("cached_") , @fourth.to_rxf
assert @fourth.cached_type.start_with?("cached_") , @fourth.to_rxf
end
def est_receiver_move_class

View File

@ -15,8 +15,8 @@ module Vool
[IntegerStatement , 5]
end
def test_args_two_move
assert_equal :next_message, @stats[1].arguments[1].left[1]
assert_equal :arguments, @stats[1].arguments[1].left[2]
assert_equal :next_message, @stats[1].arguments[1].left.slots[0]
assert_equal :arguments, @stats[1].arguments[1].left.slots[1]
end
def test_args_two_str
assert_equal IntegerStatement, @stats[1].arguments[1].right.class

View File

@ -16,8 +16,8 @@ module Vool
end
def test_args_one_move
assert_equal :next_message, @stats[1].arguments[0].left[1]
assert_equal :arguments, @stats[1].arguments[0].left[2]
assert_equal :next_message, @stats[1].arguments[0].left.slots[0]
assert_equal :arguments, @stats[1].arguments[0].left.slots[1]
end
def test_args_one_str
assert_equal IntegerStatement, @stats[1].arguments[0].right.class

View File

@ -19,13 +19,13 @@ module Vool
assert @method.first.left
end
def test_slot_starts_at_message
assert_equal :message , @method.first.left[0]
assert_equal :message , @method.first.left.known_object
end
def test_slot_gets_self
assert_equal :self , @method.first.left[1]
assert_equal :self , @method.first.left.slots[0]
end
def test_slot_assigns_to_local
assert_equal :a , @method.first.left[-1]
assert_equal :a , @method.first.left.slots[-1]
end
def test_slot_assigns_something
assert @method.first.right

View File

@ -25,10 +25,10 @@ module Vool
assert_equal Mom::ReturnSequence, @stats.last.class
end
def test_slot_starts_at_message
assert_equal :message , @stats.first.left[0]
assert_equal :message , @stats.first.left.known_object
end
def test_slot_gets_return
assert_equal :return_value , @stats.first.left[1]
assert_equal :return_value , @stats.first.left.slots[0]
end
def test_slot_assigns_something
assert @stats.first.right