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 }