1 cananian 1.1.2.1 // PMETHOD.java, created Wed Jan 20 21:47:52 1999 by cananian
 2 cananian 1.1.2.1 // Copyright (C) 1999 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.LowQuad;
 5 cananian 1.1.2.1 
 6 cananian 1.1.2.1 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.1 
10 cananian 1.1.2.1 /**
11 cananian 1.1.2.1  * <code>PMETHOD</code> converts an object reference into a
12 cananian 1.1.2.1  * <code>POINTER</code> value that can be used to invoke
13 cananian 1.1.2.1  * object methods.  Only necessary for <b>virtual</b> methods.
14 cananian 1.1.2.1  * Non-virtual methods can be invoked via the <code>POINTER</code>
15 cananian 1.1.2.1  * obtained by <code>PMCONST</code>. <br>
16 cananian 1.1.2.2  * <b>NOTE THAT</b> constructors and invocations using the <code>super</code>
17 cananian 1.1.2.1  * keyword are non-virtual.  See the <code>harpoon.IR.Quads.CALL</code>.
18 cananian 1.1.2.1  * 
19 cananian 1.1.2.1  * @author  C. Scott Ananian <cananian@alumni.princeton.edu>
20 cananian 1.3      * @version $Id: PMETHOD.java,v 1.3 2002/04/11 04:00:21 cananian Exp $
21 cananian 1.1.2.1  */
22 cananian 1.1.2.1 public class PMETHOD extends PPTR {
23 cananian 1.1.2.1 
24 cananian 1.1.2.1     /** Creates a <code>PMETHOD</code> representing a conversion from
25 cananian 1.1.2.1      *  an object reference into a <code>POINTER</code> that
26 cananian 1.1.2.1      *  can be used to invoke <b>virtual</b> methods.
27 cananian 1.1.2.1      * @param dst
28 cananian 1.1.2.1      *        the <code>Temp</code> in which to store the computed
29 cananian 1.1.2.1      *        <code>POINTER</code>.
30 cananian 1.1.2.1      * @param objectref
31 cananian 1.1.2.1      *        the <code>Temp</code> holding the reference for the
32 cananian 1.1.2.1      *        object whose virtual methods we would like to invoke.
33 cananian 1.1.2.1      */
34 cananian 1.1.2.1     public PMETHOD(LowQuadFactory qf, HCodeElement source,
35 cananian 1.1.2.1                    final Temp dst, final Temp objectref) {
36 cananian 1.1.2.1         super(qf, source, dst, objectref);
37 cananian 1.1.2.1     }
38 cananian 1.1.2.1 
39 cananian 1.1.2.1     public int kind() { return LowQuadKind.PMETHOD; }
40 cananian 1.1.2.1 
41 cananian 1.1.2.1     public harpoon.IR.Quads.Quad rename(harpoon.IR.Quads.QuadFactory qf,
42 cananian 1.1.2.1                                         TempMap defMap, TempMap useMap) {
43 cananian 1.1.2.1         return new PMETHOD((LowQuadFactory)qf, this,
44 cananian 1.1.2.1                            map(defMap, dst), map(useMap, objectref));
45 cananian 1.1.2.1     }
46 cananian 1.1.2.1 
47 cananian 1.1.2.3     void accept(LowQuadVisitor v) { v.visit(this); }
48 cananian 1.3         <T> T accept(LowQuadValueVisitor<T> v) { return v.visit(this); }
49 cananian 1.1.2.1 
50 cananian 1.1.2.1     public String toString() {
51 cananian 1.1.2.1         return dst.toString() + " = PMETHOD " + objectref.toString();
52 cananian 1.1.2.1     }
53 cananian 1.2     }