1 cananian 1.1.2.1 // TreeDerivation.java, created Tue Feb 1 00:35:43 2000 by cananian 2 cananian 1.1.2.1 // Copyright (C) 2000 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.ClassFile.HClass; 7 cananian 1.1.2.1 import harpoon.Analysis.Maps.Derivation.DList; 8 cananian 1.1.2.1 import harpoon.Analysis.Maps.TypeMap.TypeNotKnownException; 9 cananian 1.1.2.1 10 cananian 1.1.2.1 /** 11 cananian 1.1.2.1 * <code>TreeDerivation</code> provides a means to access type and 12 cananian 1.1.2.1 * derivation information for any <code>Tree.Exp</code> in a code 13 cananian 1.1.2.1 * representation. 14 cananian 1.1.2.1 * 15 cananian 1.1.2.1 * @author C. Scott Ananian <cananian@alumni.princeton.edu> 16 cananian 1.2 * @version $Id: TreeDerivation.java,v 1.2 2002/02/25 21:05:42 cananian Exp $ 17 cananian 1.1.2.1 * @see harpoon.Analysis.Maps.Derivation 18 cananian 1.1.2.1 * @see harpoon.Analysis.Maps.TypeMap 19 cananian 1.1.2.1 */ 20 cananian 1.1.2.1 public interface TreeDerivation { 21 cananian 1.1.2.1 22 cananian 1.1.2.1 /** Returns the type of a given tree expression <code>exp</code>. 23 cananian 1.1.2.1 * If the type of the <code>Tree.Exp</code> is not known, throws 24 cananian 1.1.2.1 * <code>TypeNotKnownException</code>. If the <code>Tree.Exp</code> 25 cananian 1.1.2.1 * represents a derived pointer, <code>null</code> is returned, in 26 cananian 1.1.2.1 * which case the <code>derivation()</code> method <b>must</b> 27 cananian 1.1.2.1 * return a non-<code>null</code> value. <code>HClass.Void</code> 28 cananian 1.1.2.1 * is returned to indicate the type of a null pointer; as a special 29 cananian 1.1.2.1 * case, it is also returned to indicate the type of an opaque 30 cananian 1.1.2.1 * pointer value which does not correspond to a java object pointer 31 cananian 1.1.2.1 * or some derivation thereof and thus should not be traced during 32 cananian 1.1.2.1 * garbage collection. 33 cananian 1.1.2.1 * @param exp The tree expression to examine. 34 cananian 1.1.2.1 * @return the type of <code>exp</code> 35 cananian 1.1.2.1 * @exception TypeNotKnownException if the <code>TreeDerivation</code> 36 cananian 1.1.2.1 * does not have any information about <code>exp</code>. 37 cananian 1.1.2.1 * @see harpoon.Analysis.Maps.TypeMap 38 cananian 1.1.2.1 */ 39 cananian 1.1.2.1 public HClass typeMap(Exp exp) throws TypeNotKnownException; 40 cananian 1.1.2.1 /** Returns the derivation of a given tree expression <code>exp</code>. 41 cananian 1.1.2.1 * If the derivation of the <code>Tree.Exp</code> is not known, 42 cananian 1.1.2.1 * throws <code>TypeNotKnownException</code>. If the 43 cananian 1.1.2.1 * <code>Tree.Exp</code> represents a non-derived base pointer, 44 cananian 1.1.2.1 * returns <code>null</code>, in which case the <code>typeMap()</code> 45 cananian 1.1.2.1 * method <b>must</b> return a non-<code>null</code> value. 46 cananian 1.1.2.1 * @param exp The tree expression to examine. 47 cananian 1.1.2.1 * @return the derivation of <code>exp</code> 48 cananian 1.1.2.1 * @exception TypeNotKnownException if the <code>TreeDerivation</code> 49 cananian 1.1.2.1 * does not have any information about <code>exp</code>. 50 cananian 1.1.2.1 * @see harpoon.Analysis.Maps.Derivation 51 cananian 1.1.2.1 */ 52 cananian 1.1.2.1 public DList derivation(Exp exp) throws TypeNotKnownException; 53 cananian 1.2 }