A major complaint about early versions of Cetus was that the
printing of IR was not flexible enough. To solve this problem, we have
made printing completely customizable by the pass writer. Nearly all
classes implement a Printable interface, which means
they provide a print method for printing themselves
as source code. By default, this print method calls a
static method of the same class, called defaultPrint.
The call is made by invoking a Java Method object,
which is similar to a function pointer in C. The
Method object can be changed by calling
setPrintMethod and passing it a different printing
routine. setPrintMethod allows a pass writer to
change how one particular object prints itself. If the pass writer
notices that they are calling this method frequently for the same type
of object, then it may be easier to call
setClassPrintMethod, a static method which causes all
newly created objects of a particular class to use the provided printing
routine.