1 cananian 1.1.2.1 // TreeFactory.java, created Fri Feb  5 05:41:27 1999 by cananian
 2 cananian 1.1.2.1 // Copyright (C) 1999 C. Scott Ananian <cananian@alumni.princeton.edu>
 3 cananian 1.1.2.1 // Licensed under the terms of the GNU GPL; see COPYING for details.
 4 cananian 1.1.2.1 package harpoon.IR.Tree;
 5 cananian 1.1.2.1 
 6 cananian 1.1.2.1 import harpoon.Backend.Generic.Frame;
 7 cananian 1.1.2.1 import harpoon.ClassFile.HCode;
 8 cananian 1.1.2.1 import harpoon.ClassFile.HMethod;
 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>TreeFactory</code> is responsible for assigning unique numbers
13 cananian 1.1.2.1  * to the <code>Tree</code> <code>Exp</code>s and <code>Stm</code>s in
14 cananian 1.1.2.1  * a method, and for maintaining method-wide information (a pointer to
15 cananian 1.1.2.1  * the parent <code>HCode</code>, a pointer to a
16 cananian 1.1.2.1  * <code>harpoon.Backend.Generic.Frame</code>, etc.).
17 cananian 1.1.2.1  * 
18 cananian 1.1.2.1  * @author  C. Scott Ananian <cananian@alumni.princeton.edu>
19 cananian 1.4      * @version $Id: TreeFactory.java,v 1.4 2004/02/08 01:55:51 cananian Exp $
20 cananian 1.1.2.1  */
21 cananian 1.4     public abstract class TreeFactory implements net.cscott.jutil.ReferenceUnique {
22 cananian 1.1.2.1     /** Returns the <code>TempFactory</code> to use for <code>Temp</code>
23 cananian 1.1.2.1      *  arguments to <code>Exp</code>s and <code>Stm</code>s generated by
24 cananian 1.1.2.1      *  this factory. */
25 cananian 1.1.2.1     public abstract TempFactory tempFactory();
26 cananian 1.1.2.1     // FIXME: LabelFactory, too.
27 cananian 1.1.2.1     /** Returns the <code>Frame</code> to be used to resolve
28 cananian 1.1.2.1      *  machine-dependent issues for this <code>TreeFactory</code>. */
29 cananian 1.1.2.1     public abstract Frame getFrame();
30 cananian 1.3         /** Indicate that the parent has changed, so that its
31 cananian 1.3          *  fail-fast iterators will work correctly. */
32 cananian 1.3         abstract void incModCount();
33 cananian 1.1.2.1     /** Returns a unique number for an <code>Exp</code> or <code>Stm</code>
34 cananian 1.1.2.1      *  within this <code>TreeFactory</code>. */
35 cananian 1.1.2.1     abstract int getUniqueID();
36 cananian 1.1.2.1     /** Returns a human-readable representation for this
37 cananian 1.1.2.1      *  <code>TreeFactory</code>. */
38 cananian 1.1.2.2     public abstract String toString();
39 cananian 1.1.2.2     /** Generates a repeatable hashcode for this factory. */
40 cananian 1.1.2.2     public abstract int hashCode();
41 cananian 1.2     }