1 cananian 1.1.2.1 // PointsToAnalysis.java, created Fri Mar  1 01:22:26 2002 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.Analysis;
 5 cananian 1.1.2.1 
 6 cananian 1.3     import harpoon.ClassFile.HClass;
 7 cananian 1.1.2.1 import harpoon.ClassFile.HCodeElement;
 8 cananian 1.1.2.1 import harpoon.Temp.Temp;
 9 cananian 1.1.2.1 
10 cananian 1.1.2.1 import java.util.Set;
11 cananian 1.1.2.1 
12 cananian 1.1.2.1 /**
13 cananian 1.1.2.1  * The <code>PointsToAnalysis</code> interface encapsulates a points-to
14 cananian 1.1.2.1  * pointer analysis algorithm, allowing transformation and analysis
15 cananian 1.1.2.1  * code to use the results of a <code>PointsToAnalysis</code> w/o
16 cananian 1.1.2.1  * knowing the details of its implementation.
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: PointsToAnalysis.java,v 1.4 2004/02/08 01:49:03 cananian Exp $
20 cananian 1.1.2.1  */
21 cananian 1.3     public abstract class PointsToAnalysis<HCE extends HCodeElement,
22 cananian 1.4                                            NODE extends PointsToAnalysis.Node<HCE>,
23 cananian 1.3                                            CONTEXT extends Context> {
24 cananian 1.1.2.1 
25 cananian 1.1.2.1     /** Provides points-to information valid for all contexts in which
26 cananian 1.1.2.1      *  <code>Temp</code> <code>t</code> defined at <code>defsite</code>
27 cananian 1.1.2.1      *  is used or defined.  If <code>t1</code> defined at
28 cananian 1.1.2.1      *  <code>d1</code> can point to the same object as
29 cananian 1.1.2.1      *  <code>t2</code> defined at <code>d2</code>, then
30 cananian 1.1.2.1      *  <code>pointsTo(d1,t1)</code> and <code>pointsTo(d2,t2)</code>
31 cananian 1.1.2.1      *  will have a non-empty intersection.
32 cananian 1.1.2.1      */
33 cananian 1.3         public abstract Set<NODE> pointsTo(HCE defsite, Temp t);
34 cananian 1.1.2.1     /** Provies points-to information valid only for a use of <code>t</code>
35 cananian 1.1.2.1      *  (defined at <code>defsite</code> in the specific <code>Context</code>
36 cananian 1.1.2.1      *  <code>c</code>.  You may be required to use the same
37 cananian 1.1.2.1      *  <code>Context</code> implementation as the analysis.
38 cananian 1.1.2.1      *  If <code>t1</code> defined at <code>d1</code> can, in context
39 cananian 1.1.2.1      *  <code>c1</code>, point to the same object as <code>t2</code>
40 cananian 1.1.2.1      *  defined at <code>d2</code> does in context <code>c2</code>, then
41 cananian 1.1.2.1      *  <code>pointsTo(d1,t1,c1)</code> and <code>pointsTo(d2,t2,c2)</code>
42 cananian 1.1.2.1      *  will have a non-empty intersection.
43 cananian 1.1.2.1      */
44 cananian 1.3         public abstract Set<NODE> pointsTo(HCE defsite, Temp t, CONTEXT c);
45 cananian 1.1.2.1 
46 cananian 1.1.2.1     /** <code>PointsToAnalysis.Node</code> is just a marker interface for
47 cananian 1.1.2.1      *  the nodes in the points-to graph returned by the
48 cananian 1.1.2.1      *  <code>PointsToAnalysis</code> interface. */
49 cananian 1.3         public static interface Node<HCE extends HCodeElement> {
50 cananian 1.3             public Set<HCE> allocationSites();
51 cananian 1.3             public Set<HClass> concreteTypes();
52 cananian 1.1.2.1     }
53 cananian 1.2     }