1 cananian 1.1.2.1 // ALENGTH.java, created Wed Aug 26 18:58:09 1998 by cananian 2 cananian 1.1.2.1 // Copyright (C) 1998 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.IR.Quads; 5 cananian 1.1.2.1 6 cananian 1.1.2.7 import harpoon.ClassFile.HCodeElement; 7 cananian 1.1.2.1 import harpoon.Temp.Temp; 8 cananian 1.1.2.1 import harpoon.Temp.TempMap; 9 cananian 1.1.2.2 import harpoon.Util.Util; 10 cananian 1.1.2.1 11 cananian 1.1.2.1 /** 12 cananian 1.1.2.1 * <code>ALENGTH</code> represents an array length query. 13 cananian 1.1.2.1 * 14 cananian 1.1.2.1 * @author C. Scott Ananian <cananian@alumni.princeton.edu> 15 cananian 1.5 * @version $Id: ALENGTH.java,v 1.5 2002/04/11 04:00:28 cananian Exp $ 16 cananian 1.1.2.1 * @see ANEW 17 cananian 1.1.2.1 * @see AGET 18 cananian 1.1.2.1 * @see ASET 19 cananian 1.1.2.1 */ 20 cananian 1.1.2.1 public class ALENGTH extends Quad { 21 cananian 1.1.2.5 /** The <code>Temp</code> in which to store the array length. */ 22 cananian 1.1.2.2 protected Temp dst; 23 cananian 1.1.2.1 /** The array reference to query. */ 24 cananian 1.1.2.2 protected Temp objectref; 25 cananian 1.1.2.1 26 cananian 1.1.2.2 /** Creates a <code>ALENGTH</code> representing an array length 27 cananian 1.1.2.2 * query. 28 cananian 1.1.2.2 * @param dst 29 cananian 1.1.2.2 * the <code>Temp</code> in which to store the array length. 30 cananian 1.1.2.2 * @param objectref 31 cananian 1.1.2.2 * the <code>Temp</code> holding the array reference to query. 32 cananian 1.1.2.2 */ 33 cananian 1.1.2.4 public ALENGTH(QuadFactory qf, HCodeElement source, 34 cananian 1.1.2.1 Temp dst, Temp objectref) { 35 cananian 1.1.2.4 super(qf, source); 36 cananian 1.1.2.1 this.dst = dst; 37 cananian 1.1.2.1 this.objectref = objectref; 38 cananian 1.1.2.2 // VERIFY legality of this ALENGTH 39 cananian 1.3.2.1 assert dst!=null && objectref!=null; 40 cananian 1.1.2.1 } 41 cananian 1.1.2.2 /** Returns the destination <code>Temp</code>. */ 42 cananian 1.1.2.2 public Temp dst() { return dst; } 43 cananian 1.1.2.2 /** Returns the <code>Temp</code> holding the array reference to query. */ 44 cananian 1.1.2.2 public Temp objectref() { return objectref; } 45 cananian 1.1.2.1 46 cananian 1.1.2.5 /** Returns the <code>Temp</code> defined by this Quad. 47 cananian 1.1.2.1 * @return the <code>dst</code> field. */ 48 cananian 1.1.2.1 public Temp[] def() { return new Temp[] { dst }; } 49 cananian 1.1.2.5 /** Returns the <code>Temp</code> used by this Quad. 50 cananian 1.1.2.1 * @return the <code>objectref</code> field. */ 51 cananian 1.1.2.1 public Temp[] use() { return new Temp[] { objectref }; } 52 cananian 1.1.2.1 53 cananian 1.1.2.3 public int kind() { return QuadKind.ALENGTH; } 54 cananian 1.1.2.3 55 cananian 1.1.2.6 public Quad rename(QuadFactory qqf, TempMap defMap, TempMap useMap) { 56 cananian 1.1.2.4 return new ALENGTH(qqf, this, 57 cananian 1.1.2.6 map(defMap,dst), map(useMap,objectref)); 58 cananian 1.1.2.3 } 59 cananian 1.1.2.6 /** Rename all used variables in this Quad according to a mapping. 60 cananian 1.1.2.6 * @deprecated does not preserve immutability. */ 61 cananian 1.1.2.3 void renameUses(TempMap tm) { 62 cananian 1.1.2.1 objectref = tm.tempMap(objectref); 63 cananian 1.1.2.1 } 64 cananian 1.1.2.6 /** Rename all defined variables in this Quad according to a mapping. 65 cananian 1.1.2.6 * @deprecated does not preserve immutability. */ 66 cananian 1.1.2.3 void renameDefs(TempMap tm) { 67 cananian 1.1.2.1 dst = tm.tempMap(dst); 68 cananian 1.1.2.1 } 69 cananian 1.1.2.1 70 cananian 1.1.2.8 public void accept(QuadVisitor v) { v.visit(this); } 71 cananian 1.5 public <T> T accept(QuadValueVisitor<T> v) { return v.visit(this); } 72 cananian 1.1.2.1 73 cananian 1.1.2.1 /** Returns a human-readable representation of this quad. */ 74 cananian 1.1.2.1 public String toString() { 75 cananian 1.1.2.1 return dst.toString() + " = ALENGTH " + objectref; 76 cananian 1.1.2.1 } 77 cananian 1.2 }