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 }