1 pnkfelix 1.1.2.1 // UseDefer.java, created Thu Jan 27 15:33:54 2000 by pnkfelix 2 cananian 1.1.2.5 // Copyright (C) 2000 Felix S. Klock II <pnkfelix@mit.edu> 3 pnkfelix 1.1.2.1 // Licensed under the terms of the GNU GPL; see COPYING for details. 4 pnkfelix 1.1.2.1 package harpoon.IR.Properties; 5 pnkfelix 1.1.2.1 6 pnkfelix 1.1.2.1 import harpoon.ClassFile.HCodeElement; 7 pnkfelix 1.1.2.1 import harpoon.Temp.Temp; 8 pnkfelix 1.1.2.1 import java.util.Collection; 9 pnkfelix 1.1.2.1 10 pnkfelix 1.1.2.1 /** 11 cananian 1.1.2.3 * <code>UseDefer</code> provides a means to externally associate use and 12 cananian 1.1.2.3 * def information with elements of an intermediate representation. 13 pnkfelix 1.1.2.1 * 14 cananian 1.1.2.5 * @author Felix S. Klock II <pnkfelix@mit.edu> 15 cananian 1.5 * @version $Id: UseDefer.java,v 1.5 2004/02/08 05:01:39 cananian Exp $ 16 pnkfelix 1.1.2.1 */ 17 cananian 1.2.2.1 public abstract class UseDefer<HCE extends HCodeElement> { 18 pnkfelix 1.1.2.1 19 pnkfelix 1.1.2.2 /** Return all the <code>Temp</code>s used by <code>hce</code>. */ 20 cananian 1.2.2.1 public Temp[] use(HCE hce) { 21 cananian 1.5 Collection<Temp> c = useC(hce); 22 pnkfelix 1.1.2.1 return (Temp[]) c.toArray(new Temp[c.size()]); 23 pnkfelix 1.1.2.1 } 24 pnkfelix 1.1.2.2 25 pnkfelix 1.1.2.2 /** Return all the <code>Temp</code>s defined by 26 pnkfelix 1.1.2.2 <code>hce</code>. 27 pnkfelix 1.1.2.2 */ 28 cananian 1.2.2.1 public Temp[] def(HCE hce) { 29 cananian 1.5 Collection<Temp> c = defC(hce); 30 pnkfelix 1.1.2.1 return (Temp[]) c.toArray(new Temp[c.size()]); 31 pnkfelix 1.1.2.1 } 32 pnkfelix 1.1.2.1 33 pnkfelix 1.1.2.2 /** Returns a <code>Collection</code> of all the 34 pnkfelix 1.1.2.2 <code>Temp</code>s that may be read by <code>hce</code>. 35 pnkfelix 1.1.2.2 */ 36 cananian 1.2.2.1 public abstract Collection<Temp> useC(HCE hce); 37 pnkfelix 1.1.2.2 38 pnkfelix 1.1.2.2 /** Returns a <code>Collection</code> of all the 39 pnkfelix 1.1.2.2 <code>Temp</code>s that are defined by <code>hce</code>. 40 pnkfelix 1.1.2.2 */ 41 cananian 1.2.2.1 public abstract Collection<Temp> defC(HCE hce); 42 pnkfelix 1.1.2.1 43 pnkfelix 1.1.2.2 /** Default <code>UseDefer</code> for <code>HCodeElement</code>s 44 cananian 1.1.2.4 which implement <code>UseDefable</code>. Does nothing but cast 45 pnkfelix 1.1.2.2 the supplied <code>HCodeElement</code> to a 46 cananian 1.1.2.4 <code>UseDefable</code> and invoke the appropriate corresponding 47 cananian 1.1.2.4 method in the <code>UseDefable</code> interface. 48 pnkfelix 1.1.2.2 @see java.util.Comparator 49 pnkfelix 1.1.2.2 @see java.lang.Comparable 50 cananian 1.4 @see net.cscott.jutil.Default.comparator 51 pnkfelix 1.1.2.2 */ 52 cananian 1.2.2.1 // see commentary on CFGrapher.DEFAULT. 53 pnkfelix 1.1.2.2 public static final UseDefer DEFAULT = new UseDefer() { 54 cananian 1.2.2.1 public Collection<Temp> useC(HCodeElement hce) { 55 cananian 1.1.2.4 return ((UseDefable)hce).useC(); 56 pnkfelix 1.1.2.2 } 57 cananian 1.2.2.1 public Collection<Temp> defC(HCodeElement hce) { 58 cananian 1.1.2.4 return ((UseDefable)hce).defC(); 59 pnkfelix 1.1.2.2 } 60 pnkfelix 1.1.2.2 }; 61 pnkfelix 1.1.2.1 62 cananian 1.2 }