module Risc
  # load raw data into a register
  #
  # This is not really used by the compiler, or to be more precise: not used during the
  # compilation of ruby code. Ruby code works on Objects only
  #
  # But for Builtin methods, methods that are created programatically and form the runtime,
  # it can be handy to load an integer directly without the object overhead.
  #
  class LoadData < Instruction
    def initialize( source , constant , register)
      super(source)
      @register = register
      @constant = constant
      raise "Not Integer #{constant}" unless constant.is_a?(Integer)
      raise "Not register #{register}" unless RegisterValue.look_like_reg(register)
    end
    attr_accessor :register , :constant

    def to_s
      class_source "#{register} <- #{constant}"
    end

  end
  def self.load_data( source , constant , register )
    LoadData.new( source , constant , register)
  end
end