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 }