1 salcianu 1.1.2.1  // MyAP.java, created Mon Apr  3 18:22:05 2000 by salcianu
  2 cananian 1.1.2.12 // Copyright (C) 2000 Alexandru SALCIANU <salcianu@retezat.lcs.mit.edu>
  3 salcianu 1.1.2.1  // Licensed under the terms of the GNU GPL; see COPYING for details.
  4 salcianu 1.1.2.1  package harpoon.Analysis.PointerAnalysis;
  5 salcianu 1.1.2.1  
  6 salcianu 1.1.2.1  import harpoon.Analysis.Maps.AllocationInformation;
  7 salcianu 1.1.2.10 import harpoon.Analysis.DefaultAllocationInformation;
  8 kkz      1.1.2.6  import harpoon.ClassFile.HClass;
  9 salcianu 1.6      import harpoon.Temp.Label;
 10 salcianu 1.1.2.1  import harpoon.Temp.Temp;
 11 salcianu 1.1.2.1  
 12 salcianu 1.1.2.1  import harpoon.Util.Util;
 13 salcianu 1.1.2.1  
 14 salcianu 1.1.2.1  /**
 15 salcianu 1.1.2.1   * <code>MyAP</code> is my own implementation for the
 16 salcianu 1.1.2.1   <code>AllocationProperties</code>. 
 17 salcianu 1.1.2.1   * 
 18 cananian 1.1.2.12  * @author  Alexandru SALCIANU <salcianu@retezat.lcs.mit.edu>
 19 salcianu 1.6       * @version $Id: MyAP.java,v 1.6 2003/03/03 23:41:45 salcianu Exp $
 20 salcianu 1.1.2.1   */
 21 salcianu 1.1.2.2  public class MyAP implements AllocationInformation.AllocationProperties,
 22 salcianu 1.1.2.7                               java.io.Serializable,
 23 salcianu 1.1.2.7                               java.lang.Cloneable {
 24 salcianu 1.1.2.1      
 25 salcianu 1.1.2.1      // hasInteriorPointers
 26 salcianu 1.1.2.1      public boolean hip = true;
 27 salcianu 1.1.2.1      // canBeStackAllocated
 28 salcianu 1.1.2.1      public boolean sa  = false;
 29 salcianu 1.1.2.1      // canBeThreadAllocated
 30 salcianu 1.1.2.1      public boolean ta  = false;
 31 salcianu 1.1.2.4      // useOwnHeap
 32 salcianu 1.1.2.1      public boolean uoh = false;
 33 salcianu 1.1.2.4      // make heap (true at the thread object creation sites)
 34 salcianu 1.1.2.4      public boolean mh  = false;
 35 salcianu 1.1.2.10     // sync's on this object are unnecessary
 36 salcianu 1.1.2.10     public boolean ns  = false;
 37 salcianu 1.1.2.4  
 38 salcianu 1.1.2.1      // the Temp pointing to the thread object on whose stack
 39 salcianu 1.1.2.4      // the NEW quad is going to allocate the object; "null"
 40 salcianu 1.1.2.1      // to indicate the current thread.
 41 salcianu 1.1.2.1      public Temp ah = null;
 42 salcianu 1.1.2.1  
 43 kkz      1.1.2.6      private HClass actualClass;
 44 kkz      1.1.2.6  
 45 salcianu 1.1.2.1      /** Creates a <code>MyAP</code>. */
 46 kkz      1.1.2.6      public MyAP(HClass actualClass) {
 47 kkz      1.1.2.6          this.actualClass = actualClass;
 48 salcianu 1.1.2.10         this.hip =
 49 salcianu 1.1.2.10             DefaultAllocationInformation.hasInteriorPointers(actualClass);
 50 kkz      1.1.2.6      }
 51 salcianu 1.1.2.1  
 52 salcianu 1.1.2.1  
 53 salcianu 1.1.2.1      public boolean hasInteriorPointers(){
 54 salcianu 1.1.2.1          return hip;
 55 salcianu 1.1.2.1      }
 56 salcianu 1.1.2.1  
 57 salcianu 1.1.2.1      public boolean canBeStackAllocated(){
 58 salcianu 1.1.2.1          return sa;
 59 salcianu 1.1.2.1      }
 60 salcianu 1.1.2.1  
 61 salcianu 1.1.2.1      public boolean canBeThreadAllocated(){
 62 salcianu 1.1.2.1          return ta;
 63 salcianu 1.1.2.1      }
 64 salcianu 1.1.2.1  
 65 cananian 1.1.2.3      public boolean makeHeap(){
 66 salcianu 1.1.2.4          return mh;
 67 salcianu 1.1.2.10     }
 68 salcianu 1.1.2.10 
 69 salcianu 1.1.2.10     public boolean noSync() {
 70 salcianu 1.1.2.11         return sa || ta || ns;
 71 salcianu 1.1.2.1      }
 72 salcianu 1.1.2.1  
 73 salcianu 1.1.2.1      public Temp allocationHeap(){
 74 salcianu 1.1.2.1          return ah;
 75 kkz      1.1.2.6      }
 76 kkz      1.1.2.6  
 77 kkz      1.1.2.6      public HClass actualClass() {
 78 kkz      1.1.2.6          return actualClass;
 79 salcianu 1.1.2.7      }
 80 salcianu 1.1.2.7  
 81 kkz      1.3          public boolean setDynamicWBFlag() {
 82 kkz      1.3              return false;
 83 kkz      1.3          }
 84 salcianu 1.4      
 85 salcianu 1.6          public Label getLabelOfPtrToMemoryChunk() { return null; }
 86 salcianu 1.6          public int   getUniqueID() { return -1; }
 87 salcianu 1.1.2.7  
 88 salcianu 1.1.2.7      public Object clone() {
 89 salcianu 1.1.2.7          try{
 90 salcianu 1.1.2.7              return super.clone();
 91 salcianu 1.1.2.7          }
 92 salcianu 1.1.2.7          catch(CloneNotSupportedException excp){
 93 salcianu 1.1.2.7              System.exit(1);
 94 salcianu 1.1.2.7              return null; // should never happen
 95 salcianu 1.1.2.7          }
 96 salcianu 1.1.2.1      }
 97 salcianu 1.1.2.1  
 98 salcianu 1.1.2.1      /** Pretty printer for debug. */
 99 salcianu 1.1.2.1      public String toString(){
100 salcianu 1.1.2.4          String hipstr = 
101 salcianu 1.1.2.4              hasInteriorPointers() ? "interior ptrs; " : "no interior ptrs; ";
102 salcianu 1.1.2.11 
103 salcianu 1.1.2.11         if(noSync())
104 salcianu 1.1.2.11             hipstr += " nosync ";
105 salcianu 1.1.2.4  
106 salcianu 1.1.2.4          if(makeHeap()) hipstr = hipstr + " [make heap] ";
107 salcianu 1.1.2.4  
108 salcianu 1.1.2.4          if(canBeStackAllocated())
109 salcianu 1.1.2.1              return hipstr + "Stack allocation";
110 salcianu 1.1.2.4  
111 salcianu 1.1.2.5          if(canBeThreadAllocated()){
112 salcianu 1.1.2.5              if(makeHeap())
113 salcianu 1.1.2.5                  return hipstr + " Thread allocation on its own heap";
114 salcianu 1.1.2.5              else{
115 salcianu 1.1.2.5                  if(allocationHeap() != null)
116 salcianu 1.1.2.5                      return (hipstr + "Thread allocation on the heap of " +
117 salcianu 1.1.2.5                              allocationHeap());
118 salcianu 1.1.2.5                  else
119 salcianu 1.1.2.5                      return
120 salcianu 1.1.2.5                          hipstr + 
121 salcianu 1.1.2.5                          "Thread allocation on the current thread's heap";
122 salcianu 1.1.2.5              }
123 salcianu 1.1.2.5          }
124 salcianu 1.1.2.1          return hipstr + "Global heap allocation";
125 salcianu 1.1.2.1      }
126 cananian 1.2      }