switch to spaces only..
[IRC.git] / Robust / src / IR / Tree / NameNode.java
1 package IR.Tree;
2 import IR.NameDescriptor;
3 import IR.Descriptor;
4 import IR.VarDescriptor;
5 import IR.TagVarDescriptor;
6 import IR.TypeDescriptor;
7 import IR.FieldDescriptor;
8 import IR.ClassDescriptor;
9
10 public class NameNode extends ExpressionNode {
11   NameDescriptor name;
12   Descriptor vd;
13   FieldDescriptor fd;
14   ExpressionNode en;
15   ClassDescriptor cd;
16
17   public NameNode(NameDescriptor nd) {
18     this.name=nd;
19     this.vd=null;
20     this.fd=null;
21     this.cd = null;
22   }
23
24   public ExpressionNode getExpression() {
25     return en;
26   }
27
28   public ClassDescriptor getClassDesc() {
29     return this.cd;
30   }
31
32   public void setClassDesc(ClassDescriptor cd) {
33     this.cd = cd;
34   }
35
36   /* Gross hack */
37   public void setExpression(ExpressionNode en) {
38     this.en=en;
39   }
40
41   public void setVar(Descriptor vd) {
42     this.vd=vd;
43   }
44
45   public void setField(FieldDescriptor fd) {
46     this.fd=fd;
47   }
48
49   public FieldDescriptor getField() {
50     return fd;
51   }
52
53   public boolean isTag() {
54     return (vd instanceof TagVarDescriptor);
55   }
56
57   public VarDescriptor getVar() {
58     return (VarDescriptor) vd;
59   }
60
61   public TagVarDescriptor getTagVar() {
62     return (TagVarDescriptor) vd;
63   }
64
65   public TypeDescriptor getType() {
66     if (en!=null)
67       return en.getType();
68     else if (fd!=null) {
69       return fd.getType();
70     } else if (isTag())
71       return new TypeDescriptor(TypeDescriptor.TAG);
72     else if(vd != null) {
73       return ((VarDescriptor)vd).getType();
74     }
75     if(cd != null) {
76       TypeDescriptor tp = new TypeDescriptor(cd);
77       tp.setClassNameRef();
78       return tp;
79     } else {
80       return null;
81     }
82
83   }
84
85   public TypeDescriptor getClassType() {
86     if(cd != null) {
87       TypeDescriptor tp = new TypeDescriptor(cd);
88       tp.setClassNameRef();
89       return tp;
90     } else
91       return null;
92   }
93
94   public NameDescriptor getName() {
95     return name;
96   }
97
98   public String printNode(int indent) {
99     return name.toString();
100   }
101
102   public int kind() {
103     return Kind.NameNode;
104   }
105
106   public Long evaluate() {
107     eval = null;
108     if(fd != null ) {
109       if(fd.isFinal() && fd.isStatic()) {
110         eval = fd.getExpressionNode().evaluate();
111       } else if(fd.isEnum()) {
112         eval = Long.valueOf((long)fd.enumValue());
113       }
114     } else if(en!= null) {
115       eval = en.evaluate();
116     }
117     return eval; //null;
118   }
119 }