module Virtual

  # The current Message is one of four objects the virtual machine knows
  #
  # Slots represent instance variables of objects, so MessageSlots
  # represent instance variables of Message objects.
  # The Message has a layout as per the constant above

  class MessageSlot < Slot
    def initialize type  , value = nil
      super(type , value )
    end
    def object_name
      :message
    end
  end

  # named classes exist for slots that often accessed

  # Return is the return of MessageSlot
  class Return < MessageSlot
    def initialize type , value = nil
      super( type , value  )
    end
  end

  # Self is the self in MessageSlot
  class Self < MessageSlot
    def initialize type , value = nil
      super( type , value  )
    end
  end

  # MessageName of the current message
  class MessageName < MessageSlot
    def initialize type , value = nil
      super( type , value  )
    end
  end

  # NewMessageName of the next message
  class ArgSlot < MessageSlot
    def initialize index , type , value = nil
      @index = index
      super( type , value )
    end
    attr_reader :index
    def to_s
      "#{self.class.name}.new(#{index} , #{type}, #{value})"
    end
  end


end