getting the passes back and starting on send

This commit is contained in:
Torsten Ruger
2014-08-21 17:46:12 +03:00
parent b5792c155c
commit 2260c680b2
6 changed files with 53 additions and 17 deletions

View File

@ -33,6 +33,14 @@ module Virtual
self
end
# replace a code with an array of new codes. This is what happens in passes all the time
def replace_with code , new_codes
index = @codes.index code
raise "Code not found #{code} in #{self}" unless index
@codes.delete_at(index)
@codes.insert(index , *new_codes)
end
# returns if this is a block that ends in a call (and thus needs local variable handling)
def call_block?
return false unless codes.last.is_a?(CallInstruction)

View File

@ -11,6 +11,9 @@ module Virtual
class Slot < Value
RETURN = 0
SELF = 1
FRAME = 2
NAME = 3
MESSAGE_PAYLOAD = 4
attr_accessor :index , :type
private #abstract base class
@ -22,7 +25,7 @@ module Virtual
class MessageSlot < Slot
def initialize index , type = Mystery
super
super(index + MESSAGE_PAYLOAD ,type)
end
end
class FrameSlot < Slot
@ -37,28 +40,39 @@ module Virtual
end
class NewMessageSlot < Slot
def initialize index , type = Mystery
super
super(index + MESSAGE_PAYLOAD , type)
end
end
class Return < MessageSlot
def initialize type = Mystery
super( RETURN , type )
end
end
class NewReturn < NewMessageSlot
def initialize type = Mystery
super( RETURN , type )
super( RETURN - MESSAGE_PAYLOAD, type )
end
end
class Self < MessageSlot
def initialize type = Mystery
super( SELF , type )
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 , type )
super( SELF - MESSAGE_PAYLOAD , type )
end
end
class NewName < NewMessageSlot
def initialize type = Mystery
super( NAME - MESSAGE_PAYLOAD , type )
end
end