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     }