1 cananian 1.1.2.1 // QuadFactory.java, created Sun Dec 13 02:13:47 1998 by cananian 2 cananian 1.1.2.9 // Copyright (C) 1998 C. Scott Ananian <cananian@alumni.princeton.edu> 3 cananian 1.1.2.9 // Licensed under the terms of the GNU GPL; see COPYING for details. 4 cananian 1.1.2.1 package harpoon.IR.Quads; 5 cananian 1.1.2.1 6 cananian 1.1.2.7 import harpoon.ClassFile.HMethod; 7 cananian 1.1.2.10 import harpoon.ClassFile.Linker; 8 cananian 1.1.2.1 import harpoon.Temp.Temp; 9 cananian 1.1.2.1 import harpoon.Temp.TempFactory; 10 cananian 1.1.2.1 11 cananian 1.1.2.1 /** 12 cananian 1.1.2.1 * A <code>QuadFactory</code> is responsible for assigning unique numbers 13 cananian 1.1.2.1 * to the <code>Quad</code>s in a method, and for maintaining some 14 cananian 1.1.2.1 * method-wide information (such as a pointer to the parent 15 cananian 1.1.2.1 * <code>HCode</code>). 16 cananian 1.1.2.1 * 17 cananian 1.1.2.1 * @author C. Scott Ananian <cananian@alumni.princeton.edu> 18 cananian 1.2 * @version $Id: QuadFactory.java,v 1.2 2002/02/25 21:05:12 cananian Exp $ 19 cananian 1.1.2.1 */ 20 cananian 1.1.2.1 public abstract class QuadFactory { 21 cananian 1.1.2.1 /** Returns the <code>TempFactory</code> to use for <code>Temp</code> 22 cananian 1.1.2.1 * arguments to <code>Quad</code>s generated by this factory. */ 23 cananian 1.1.2.1 public abstract TempFactory tempFactory(); 24 cananian 1.1.2.1 /** Returns the <code>HCode</code> to which all <Code>Quad</code>s 25 cananian 1.1.2.1 * generated by this <code>QuadFactory</code> belong. */ 26 cananian 1.1.2.1 public abstract Code getParent(); 27 cananian 1.1.2.4 /** Returns the <code>HMethod</code> for which all <code>Quad</code>s 28 cananian 1.1.2.4 * correspond. */ 29 cananian 1.1.2.4 public HMethod getMethod() { return getParent().getMethod(); } 30 cananian 1.1.2.10 /** Returns the <code>Linker</code> used to resolve class names 31 cananian 1.1.2.10 * for all <code>Quad</code>s. */ 32 cananian 1.1.2.10 public Linker getLinker() { 33 cananian 1.1.2.10 return getMethod().getDeclaringClass().getLinker(); 34 cananian 1.1.2.10 } 35 cananian 1.1.2.6 /** Returns a unique number for a <code>Quad</code> within 36 cananian 1.1.2.1 * this <code>QuadFactory</code>. */ 37 cananian 1.1.2.6 public abstract int getUniqueID(); 38 cananian 1.1.2.1 /** Returns a human-readable representation for this 39 cananian 1.1.2.1 * <code>QuadFactory</code>. */ 40 cananian 1.1.2.1 public String toString() { 41 cananian 1.1.2.1 return "QuadFactory["+getParent().toString()+"]"; 42 cananian 1.1.2.1 } 43 cananian 1.2 }