rubyx/lib/virtual/slot.rb
2014-08-21 17:46:12 +03:00

80 lines
1.9 KiB
Ruby

module Virtual
# Slots are named, or rather indexed, storage locations that are typed.
# Four of those locations exist and those correspond to subclasses:
# - the message that has been received: MessageSlot
# - the frame of the method that is executing (local variables): FrameSlot
# - self as an object: SelfSlot
# - a message that will be sent, NewMessageSlot
# additionally frame, self and return are slots in Message and NewMessage
class Slot < Value
RETURN = 0
SELF = 1
FRAME = 2
NAME = 3
MESSAGE_PAYLOAD = 4
attr_accessor :index , :type
private #abstract base class
def initialize index , type
@index = index
@type = type
end
end
class MessageSlot < Slot
def initialize index , type = Mystery
super(index + MESSAGE_PAYLOAD ,type)
end
end
class FrameSlot < Slot
def initialize index , type = Mystery
super
end
end
class SelfSlot < Slot
def initialize index , type = Mystery
super
end
end
class NewMessageSlot < Slot
def initialize index , type = Mystery
super(index + MESSAGE_PAYLOAD , type)
end
end
class Return < MessageSlot
def initialize type = Mystery
super( RETURN - MESSAGE_PAYLOAD, type )
end
end
class Self < MessageSlot
def initialize type = Mystery
super( SELF - MESSAGE_PAYLOAD , type )
end
end
class Name < MessageSlot
def initialize type = Mystery
super( NAME - MESSAGE_PAYLOAD , type )
end
end
class NewReturn < NewMessageSlot
def initialize type = Mystery
super( RETURN - MESSAGE_PAYLOAD, type )
end
end
class NewSelf < NewMessageSlot
def initialize type = Mystery
super( SELF - MESSAGE_PAYLOAD , type )
end
end
class NewName < NewMessageSlot
def initialize type = Mystery
super( NAME - MESSAGE_PAYLOAD , type )
end
end
end