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 }