Torsten Rüger
8b29326957
object is only common to constant and object slots (which should be unified) On the way to making the array recursive
40 lines
1.0 KiB
Ruby
40 lines
1.0 KiB
Ruby
module SlotMachine
|
|
class ConstantSlot < Slot
|
|
|
|
|
|
attr_reader :known_object
|
|
|
|
def initialize( object , slots)
|
|
super(slots)
|
|
@known_object = object
|
|
raise "Not known #{slots}" unless object
|
|
end
|
|
|
|
def known_name
|
|
known_object.class.short_name
|
|
end
|
|
|
|
# load the slots into a register
|
|
# the code is added to compiler
|
|
# the register returned
|
|
def to_register(compiler, source)
|
|
if known_object.respond_to?(:ct_type)
|
|
type = known_object.ct_type
|
|
else
|
|
type = :Object
|
|
end
|
|
right = compiler.use_reg( type )
|
|
parfait = known_object.to_parfait(compiler)
|
|
const = Risc.load_constant(source, parfait , right)
|
|
compiler.add_code const
|
|
if slots.length == 1
|
|
raise "only type allowed for constants, not #{slots[0]}" unless slots[0] == :type
|
|
compiler.add_code Risc::SlotToReg.new( source , right , Parfait::TYPE_INDEX, right)
|
|
end
|
|
raise "Can't have slots into Constants #{slots}" if slots.length > 1
|
|
return const.register
|
|
end
|
|
|
|
end
|
|
end
|