1785b23a6ea213ab3c59dac28fdbe5366672fd38
[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(cd != null) {
73       TypeDescriptor tp = new TypeDescriptor(cd);
74       tp.setStatic();
75       return tp;
76     } else
77       return ((VarDescriptor)vd).getType();
78   }
79   
80   public TypeDescriptor getClassType() {
81     if(cd != null) {
82       TypeDescriptor tp = new TypeDescriptor(cd);
83       tp.setStatic();
84       return tp;
85     } else
86       return null;
87   }
88
89   NameDescriptor getName() {
90     return name;
91   }
92
93   public String printNode(int indent) {
94     return name.toString();
95   }
96
97   public int kind() {
98     return Kind.NameNode;
99   }
100   
101   public Long evaluate() {
102     eval = null;
103     if(fd != null ) {
104       if(fd.isFinal() && fd.isStatic()) {
105         eval = fd.getExpressionNode().evaluate();
106       } else if(fd.isEnum()) {
107         eval = Long.valueOf((long)fd.enumValue());
108       } 
109     } else if(en!= null) {
110       eval = en.evaluate();
111     }
112     return eval; //null;
113   }
114 }