1 salcianu 1.1.2.1 // ArrayInfo.java, created Sun Apr 2 18:18:01 2000 by salcianu 2 cananian 1.1.2.5 // 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.Util.TypeInference; 5 salcianu 1.1.2.1 6 salcianu 1.1.2.1 import java.util.Set; 7 salcianu 1.1.2.1 import java.util.HashSet; 8 salcianu 1.1.2.1 import java.util.Map; 9 salcianu 1.1.2.1 import java.util.HashMap; 10 salcianu 1.1.2.1 import java.util.Iterator; 11 salcianu 1.1.2.2 import java.util.Collections; 12 salcianu 1.1.2.1 13 salcianu 1.1.2.1 import harpoon.ClassFile.HCode; 14 salcianu 1.1.2.1 import harpoon.ClassFile.HMethod; 15 salcianu 1.1.2.1 16 salcianu 1.1.2.1 import harpoon.IR.Quads.Quad; 17 salcianu 1.1.2.1 import harpoon.IR.Quads.QuadVisitor; 18 salcianu 1.1.2.1 import harpoon.IR.Quads.AGET; 19 salcianu 1.1.2.1 20 salcianu 1.1.2.1 21 salcianu 1.1.2.1 /** 22 salcianu 1.1.2.1 * <code>ArrayInfo</code> 23 salcianu 1.1.2.1 * 24 cananian 1.1.2.5 * @author Alexandru SALCIANU <salcianu@retezat.lcs.mit.edu> 25 cananian 1.3 * @version $Id: ArrayInfo.java,v 1.3 2004/02/08 03:22:00 cananian Exp $ 26 salcianu 1.1.2.1 */ 27 salcianu 1.1.2.4 public class ArrayInfo implements java.io.Serializable { 28 salcianu 1.1.2.1 29 salcianu 1.1.2.1 /** Creates a <code>ArrayInfo</code>. */ 30 salcianu 1.1.2.1 public ArrayInfo() { 31 salcianu 1.1.2.1 } 32 salcianu 1.1.2.1 33 salcianu 1.1.2.1 /** Returns the set of <code>AGET</code> instructions from hcode 34 salcianu 1.1.2.1 that access arrays of non primitive objects. */ 35 salcianu 1.1.2.1 public Set getInterestingAGETs(HMethod hm, HCode hcode){ 36 salcianu 1.1.2.1 37 salcianu 1.1.2.1 final Set set = new HashSet(); 38 salcianu 1.1.2.1 39 salcianu 1.1.2.1 final QuadVisitor qvisitor = new QuadVisitor(){ 40 salcianu 1.1.2.1 public void visit(AGET q){ 41 salcianu 1.1.2.1 set.add(new ExactTemp(q, q.objectref())); 42 salcianu 1.1.2.1 } 43 salcianu 1.1.2.1 public void visit(Quad q){ 44 salcianu 1.1.2.1 } 45 salcianu 1.1.2.1 }; 46 salcianu 1.1.2.1 47 salcianu 1.1.2.1 for(Iterator it = hcode.getElementsI(); it.hasNext(); ) 48 salcianu 1.1.2.1 ((Quad) it.next()).accept(qvisitor); 49 salcianu 1.1.2.1 50 salcianu 1.1.2.2 if(set.isEmpty()) 51 salcianu 1.1.2.2 return Collections.EMPTY_SET; 52 salcianu 1.1.2.2 53 salcianu 1.1.2.1 TypeInference ti = new TypeInference(hm, hcode, set); 54 salcianu 1.1.2.1 55 salcianu 1.1.2.1 Set retval = new HashSet(); 56 salcianu 1.1.2.1 57 cananian 1.3 for(Object etO : set){ 58 cananian 1.3 ExactTemp et = (ExactTemp) etO; 59 salcianu 1.1.2.1 if(ti.isArrayOfNonPrimitives(et)) 60 salcianu 1.1.2.1 retval.add(et.q); 61 salcianu 1.1.2.1 } 62 salcianu 1.1.2.1 63 salcianu 1.1.2.1 return retval; 64 salcianu 1.1.2.1 } 65 salcianu 1.1.2.1 66 cananian 1.2 }