adding a test case
[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   boolean issuper;
17
18   public NameNode(NameDescriptor nd) {
19     this.name=nd;
20     this.vd=null;
21     this.fd=null;
22     this.cd = null;
23     this.issuper= false;
24   }
25   
26   public boolean isSuper() {
27       return this.issuper;
28   }
29   
30   public void setIsSuper() {
31       this.issuper = true;
32   }
33
34   public ExpressionNode getExpression() {
35     return en;
36   }
37
38   public ClassDescriptor getClassDesc() {
39     return this.cd;
40   }
41
42   public void setClassDesc(ClassDescriptor cd) {
43     this.cd = cd;
44   }
45
46   /* Gross hack */
47   public void setExpression(ExpressionNode en) {
48     this.en=en;
49   }
50
51   public void setVar(Descriptor vd) {
52     this.vd=vd;
53   }
54
55   public void setField(FieldDescriptor fd) {
56     this.fd=fd;
57   }
58
59   public FieldDescriptor getField() {
60     return fd;
61   }
62
63   public boolean isTag() {
64     return (vd instanceof TagVarDescriptor);
65   }
66
67   public VarDescriptor getVar() {
68     return (VarDescriptor) vd;
69   }
70
71   public TagVarDescriptor getTagVar() {
72     return (TagVarDescriptor) vd;
73   }
74
75   public TypeDescriptor getType() {
76     if (en!=null)
77       return en.getType();
78     else if (fd!=null) {
79       return fd.getType();
80     } else if (isTag())
81       return new TypeDescriptor(TypeDescriptor.TAG);
82     else if(vd != null) {
83       return ((VarDescriptor)vd).getType();
84     }
85     if(cd != null) {
86       TypeDescriptor tp = new TypeDescriptor(cd);
87       tp.setClassNameRef();
88       return tp;
89     } else {
90       return null;
91     }
92
93   }
94
95   public TypeDescriptor getClassType() {
96     if(cd != null) {
97       TypeDescriptor tp = new TypeDescriptor(cd);
98       tp.setClassNameRef();
99       return tp;
100     } else
101       return null;
102   }
103
104   public NameDescriptor getName() {
105     return name;
106   }
107
108   public String printNode(int indent) {
109     return name.toString();
110   }
111
112   public int kind() {
113     return Kind.NameNode;
114   }
115
116   public Long evaluate() {
117     eval = null;
118     if(fd != null ) {
119       if(fd.isFinal() && fd.isStatic()) {
120         eval = fd.getExpressionNode().evaluate();
121       } else if(fd.isEnum()) {
122         eval = Long.valueOf((long)fd.enumValue());
123       }
124     } else if(en!= null) {
125       eval = en.evaluate();
126     }
127     return eval; //null;
128   }
129 }