slot docs and rename
This commit is contained in:
@ -13,7 +13,7 @@ Virtual::SelfSlot.class_eval do
|
||||
Register::RegisterReference.self_reg
|
||||
end
|
||||
end
|
||||
Virtual::NewMessageSlot.class_eval do
|
||||
Virtual::NextMessageSlot.class_eval do
|
||||
def reg
|
||||
Register::RegisterReference.new_message_reg
|
||||
end
|
||||
|
@ -7,14 +7,14 @@ module Virtual
|
||||
def self.compile_callsite expession , method
|
||||
me = Compiler.compile( expession.receiver , method )
|
||||
method.info.add_code NewMessage.new
|
||||
method.info.add_code Set.new(NewSelf.new(me.type), me)
|
||||
method.info.add_code Set.new(NewName.new(), expession.name.to_sym)
|
||||
method.info.add_code Set.new(NextSelf.new(me.type), me)
|
||||
method.info.add_code Set.new(NextMessageName.new(), expession.name.to_sym)
|
||||
compiled_args = []
|
||||
expession.args.each_with_index do |arg , i|
|
||||
#compile in the running method, ie before passing control
|
||||
val = Compiler.compile( arg , method)
|
||||
# move the compiled value to it's slot in the new message
|
||||
to = NewMessageSlot.new(i ,val.type , val)
|
||||
to = NextMessageSlot.new(i ,val.type , val)
|
||||
# (doing this immediately, not after the loop, so if it's a return it won't get overwritten)
|
||||
method.info.add_code Set.new(to , val )
|
||||
compiled_args << to
|
||||
|
@ -21,20 +21,24 @@ module Virtual
|
||||
end
|
||||
end
|
||||
|
||||
# named classes exist for slots that often accessed
|
||||
|
||||
# Return is the MessageSlot(MESSAGE_RETURN_VALUE)
|
||||
class Return < MessageSlot
|
||||
def initialize type = Unknown, value = nil
|
||||
super( MESSAGE_RETURN_VALUE , type , value )
|
||||
end
|
||||
end
|
||||
|
||||
# Self is the MessageSlot(MESSAGE_SELF)
|
||||
class Self < MessageSlot
|
||||
def initialize type = Unknown, value = nil
|
||||
super( MESSAGE_SELF , type , value )
|
||||
end
|
||||
end
|
||||
|
||||
# Name of the current message
|
||||
class Name < MessageSlot
|
||||
# MessageName of the current message
|
||||
class MessageName < MessageSlot
|
||||
def initialize type = Unknown, value = nil
|
||||
super( MESSAGE_NAME , type , value )
|
||||
end
|
||||
|
@ -1,25 +0,0 @@
|
||||
module Virtual
|
||||
class NewMessageSlot < Slot
|
||||
def initialize index , type = Unknown, value = nil
|
||||
super(index , type , value )
|
||||
end
|
||||
end
|
||||
|
||||
class NewReturn < NewMessageSlot
|
||||
def initialize type = Unknown, value = nil
|
||||
super( MESSAGE_RETURN_VALUE, type , value )
|
||||
end
|
||||
end
|
||||
|
||||
class NewSelf < NewMessageSlot
|
||||
def initialize type = Unknown, value = nil
|
||||
super( MESSAGE_SELF , type , value )
|
||||
end
|
||||
end
|
||||
|
||||
class NewName < NewMessageSlot
|
||||
def initialize type = Unknown, value = nil
|
||||
super( MESSAGE_NAME, type , value )
|
||||
end
|
||||
end
|
||||
end
|
37
lib/virtual/slots/next_message_slot.rb
Normal file
37
lib/virtual/slots/next_message_slot.rb
Normal file
@ -0,0 +1,37 @@
|
||||
module Virtual
|
||||
|
||||
# The next Message is one of four objects the virtual machine knows
|
||||
#
|
||||
# Slots represent instance variables of objects, so NextMessageSlots
|
||||
# represent instance variables of NextMessage objects.
|
||||
# The Message has a layout as per the constant above
|
||||
|
||||
class NextMessageSlot < Slot
|
||||
def initialize index , type = Unknown, value = nil
|
||||
super(index , type , value )
|
||||
end
|
||||
end
|
||||
|
||||
# named classes exist for slots that often accessed
|
||||
|
||||
# NextReturn is the NextMessageSlot(MESSAGE_RETURN_VALUE)
|
||||
class NextReturn < NextMessageSlot
|
||||
def initialize type = Unknown, value = nil
|
||||
super( MESSAGE_RETURN_VALUE, type , value )
|
||||
end
|
||||
end
|
||||
|
||||
# NextSelf is the NextMessageSlot(MESSAGE_SELF)
|
||||
class NextSelf < NextMessageSlot
|
||||
def initialize type = Unknown, value = nil
|
||||
super( MESSAGE_SELF , type , value )
|
||||
end
|
||||
end
|
||||
|
||||
# NextMessageName of the next message
|
||||
class NextMessageName < NextMessageSlot
|
||||
def initialize type = Unknown, value = nil
|
||||
super( MESSAGE_NAME, type , value )
|
||||
end
|
||||
end
|
||||
end
|
@ -5,7 +5,7 @@ module Virtual
|
||||
# want to send a message it puts the new self into the next_message.
|
||||
#
|
||||
# The slot in the Message is represented by instances of class Self
|
||||
# (and slots in the next_message by instances of NewSelf)
|
||||
# (and slots in the next_message by instances of NextSelf)
|
||||
#
|
||||
# Additionally the current Self is represented as it's own top-level object.
|
||||
# If self is an Object one can refer to it's instance variables as Slots in SelfSlot
|
||||
|
@ -8,7 +8,7 @@ module Virtual
|
||||
# - 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
|
||||
# - a message that will be sent, NextMessageSlot
|
||||
|
||||
# additionally frame, self and return are slots in Message and NewMessage
|
||||
|
||||
|
Reference in New Issue
Block a user