module Mom

  # Base class for MOM instructions
  # At the base class level instructions are a linked list.
  #
  # Mom::Instructions are created by the Vool level as an intermediate step
  # towards the next level down, the Risc level.
  # Mom and Risc are both abstract machines (ie have instructions), so both
  # share the linked list functionality (In Common::List)
  #
  # To convert a Mom instruction to it's Risc equivalent to_risc is called
  #
  class Instruction
    include Common::List

    # to_risc, like the name says, converts the instruction to it's Risc equivalent.
    # The Risc machine is basically a simple register machine (kind of arm).
    # In other words Mom is the higher abstraction and so mom instructions convert
    # to many (1-10) risc instructions
    #
    # The argument that is passed is a MethodCompiler, which has the method and some
    # state about registers used. (also provides helpers to generate risc instructions)
    def to_risc(compiler)
      raise self.class.name + "_todo"
    end
  end

end

require_relative "label"
require_relative "check"
require_relative "basic_values"
require_relative "simple_call"
require_relative "dynamic_call"
require_relative "truth_check"
require_relative "not_same_check"
require_relative "jump"
require_relative "slot_load"
require_relative "return_sequence"
require_relative "message_setup"
require_relative "argument_transfer"