rubyx/lib/risc/instructions/load_constant.rb
Torsten Ruger 6e941ebcb7 introduce load_data instruction
which just loads data to a register (used internally)
as opposed to integers, which are objects
2018-03-31 12:38:30 +03:00

38 lines
982 B
Ruby

module Risc
# load a constant into a register
#
# first is the actual constant, either immediate register or object reference (from the space)
# second argument is the register the constant is loaded into
class LoadConstant < Instruction
def initialize source , constant , register
super(source)
@register = register
@constant = constant
raise "Not Constant #{constant}" if constant.is_a?(Mom::SlotDefinition)
end
attr_accessor :register , :constant
def to_s
class_source "#{register} <- #{constant_str}"
end
private
def constant_str
case @constant
when String , Symbol
@constant.to_s
else
if( @constant.respond_to? :sof_reference_name )
constant.sof_reference_name
else
constant.class.name.to_s
end
end
end
end
def self.load_constant( source , constant , register )
LoadConstant.new source , constant , register
end
end