51 lines
1.3 KiB
Ruby
51 lines
1.3 KiB
Ruby
module Virtual
|
|
|
|
#TODO : this constant approach is a bit old, from before PArfait adapter
|
|
# nowadays these are unneccessary as we can resolve the names by using the
|
|
# layout of the class. (get Class from space)
|
|
TYPE_INDEX = 0
|
|
LAYOUT_INDEX = 1
|
|
CALLER_INDEX = 2
|
|
RETURN_INDEX = 3
|
|
EXCEPTION_INDEX = 4
|
|
SELF_INDEX = 5
|
|
NAME_INDEX = 6
|
|
FRAME_INDEX = 7
|
|
ARGUMENT_START = 8
|
|
|
|
# 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 index , type = Unknown , value = nil
|
|
super(index ,type , value )
|
|
end
|
|
end
|
|
|
|
# named classes exist for slots that often accessed
|
|
|
|
# Return is the MessageSlot(RETURN_INDEX)
|
|
class Return < MessageSlot
|
|
def initialize type = Unknown, value = nil
|
|
super( RETURN_INDEX , type , value )
|
|
end
|
|
end
|
|
|
|
# Self is the MessageSlot(SELF_INDEX)
|
|
class Self < MessageSlot
|
|
def initialize type = Unknown, value = nil
|
|
super( SELF_INDEX , type , value )
|
|
end
|
|
end
|
|
|
|
# MessageName of the current message
|
|
class MessageName < MessageSlot
|
|
def initialize type = Unknown, value = nil
|
|
super( NAME_INDEX , type , value )
|
|
end
|
|
end
|
|
end
|