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      }