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