1 cananian 1.1.2.1 // NAME.java, created Wed Jan 13 21:14:57 1999 by cananian 2 cananian 1.1.2.11 // Copyright (C) 1998 C. Scott Ananian <cananian@alumni.princeton.edu> 3 cananian 1.1.2.11 // Licensed under the terms of the GNU GPL; see COPYING for details. 4 cananian 1.1.2.1 package harpoon.IR.Tree; 5 cananian 1.1.2.1 6 cananian 1.1.2.3 import harpoon.ClassFile.HCodeElement; 7 cananian 1.1.2.17 import harpoon.Temp.TempMap; 8 cananian 1.1.2.1 import harpoon.Temp.Label; 9 cananian 1.1.2.3 import harpoon.Util.Util; 10 cananian 1.1.2.1 11 cananian 1.1.2.1 /** 12 cananian 1.1.2.1 * <code>NAME</code> objects are expressions which stand for symbolic 13 pnkfelix 1.1.2.6 * constants. They usually correspond to some assembly language label 14 cananian 1.1.2.10 * in the code or data segment. 15 cananian 1.1.2.1 * 16 cananian 1.1.2.1 * @author C. Scott Ananian <cananian@alumni.princeton.edu>, based on 17 cananian 1.1.2.1 * <i>Modern Compiler Implementation in Java</i> by Andrew Appel. 18 cananian 1.4 * @version $Id: NAME.java,v 1.4 2002/04/10 03:05:45 cananian Exp $ 19 cananian 1.1.2.1 */ 20 cananian 1.1.2.12 public class NAME extends Exp implements harpoon.ClassFile.HDataElement { 21 cananian 1.1.2.1 /** The label which this NAME refers to. */ 22 cananian 1.1.2.1 public final Label label; 23 cananian 1.1.2.1 /** Constructor. */ 24 cananian 1.1.2.3 public NAME(TreeFactory tf, HCodeElement source, 25 cananian 1.1.2.3 Label label) { 26 cananian 1.1.2.16 super(tf, source, 0); 27 cananian 1.1.2.3 this.label=label; 28 cananian 1.3.2.1 assert label!=null; 29 cananian 1.1.2.3 } 30 duncan 1.1.2.14 31 duncan 1.1.2.7 public int kind() { return TreeKind.NAME; } 32 duncan 1.1.2.9 33 duncan 1.1.2.9 public Exp build(TreeFactory tf, ExpList kids) { 34 cananian 1.3.2.1 assert kids==null; 35 duncan 1.1.2.9 return new NAME(tf, this, label); 36 duncan 1.1.2.9 } 37 duncan 1.1.2.9 38 duncan 1.1.2.2 /** Accept a visitor */ 39 cananian 1.1.2.13 public void accept(TreeVisitor v) { v.visit(this); } 40 duncan 1.1.2.4 41 cananian 1.1.2.17 public Tree rename(TreeFactory tf, TempMap tm, CloneCallback cb) { 42 cananian 1.1.2.18 return cb.callback(this, new NAME(tf, this, this.label), tm); 43 andyb 1.1.2.5 } 44 andyb 1.1.2.5 45 cananian 1.1.2.8 /** @return <code>Type.POINTER</code> */ 46 cananian 1.1.2.8 public int type() { return POINTER; } 47 cananian 1.1.2.8 48 andyb 1.1.2.5 public String toString() { 49 andyb 1.1.2.5 return "NAME("+label+")"; 50 duncan 1.1.2.4 } 51 cananian 1.1.2.1 } 52 cananian 1.2