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     }