removing those ugly slot index constants

The constants were bad enough,
but they were also at the wrong level

Now register level is defining mappings from
symbol names to indexes, by using the layout
This commit is contained in:
Torsten Ruger
2015-06-29 10:55:22 +03:00
parent 06b5d24729
commit 5ce7b6c7c9
6 changed files with 77 additions and 57 deletions

View File

@ -48,33 +48,66 @@ module Register
RegisterReference.new( sym )
end
MESSAGE_REGISTER = :r0
SELF_REGISTER = :r1
FRAME_REGISTER = :r2
NEW_MESSAGE_REGISTER = :r3
TMP_REGISTER = :r4
def self.self_reg
new SELF_REGISTER
end
def self.message_reg
new MESSAGE_REGISTER
end
def self.frame_reg
new FRAME_REGISTER
end
def self.new_message_reg
new NEW_MESSAGE_REGISTER
end
def self.tmp_reg
new TMP_REGISTER
end
def sof_reference_name
@symbol
end
end
MESSAGE_REGISTER = :r0
SELF_REGISTER = :r1
FRAME_REGISTER = :r2
NEW_MESSAGE_REGISTER = :r3
TMP_REGISTER = :r4
def self.self_reg
RegisterReference.new SELF_REGISTER
end
def self.message_reg
RegisterReference.new MESSAGE_REGISTER
end
def self.frame_reg
RegisterReference.new FRAME_REGISTER
end
def self.new_message_reg
RegisterReference.new NEW_MESSAGE_REGISTER
end
def self.tmp_reg
RegisterReference.new TMP_REGISTER
end
def self.get_slot from , index , to
index = resolve_index( from , index)
from = resolve_to_register from
to = resolve_to_register to
GetSlot.new( from , index , to)
end
def self.resolve_index( clazz_name , instance_name )
return instance_name unless instance_name.is_a? Symbol
real_name = "#{clazz_name}".capitalize.to_sym
clazz = Parfait::Space.object_space.get_class_by_name(real_name)
raise "Class name not given #{real_name}" unless clazz
index = clazz.object_layout.index_of( instance_name )
raise "Instance name=#{instance_name} not found on #{real_name}" unless index
return index
end
def self.resolve_to_register reference
register = reference
if reference.is_a? Symbol
case reference
when :message
register = message_reg
when :self
register = self_reg
when :frame
register = frame_reg
else
raise "not recognized register reference #{reference}"
end
end
return register
end
end