66c7238d75a9d5f1cdf18c0e50babc21f3fbe294
[IRC.git] / Robust / src / IR / Tree / FieldAccessNode.java
1 package IR.Tree;
2 import IR.FieldDescriptor;
3 import IR.TypeDescriptor;
4
5 public class FieldAccessNode extends ExpressionNode {
6   ExpressionNode left;
7   String fieldname;
8   FieldDescriptor field;
9   boolean issuper;
10
11   public FieldAccessNode(ExpressionNode l, String field) {
12     fieldname=field;
13     left=l;
14     this.issuper = false;
15   }
16
17   public void setField(FieldDescriptor fd) {
18     field=fd;
19   }
20
21   public String getFieldName() {
22     return fieldname;
23   }
24   
25   public void setFieldName(String fieldname) {
26       this.fieldname = fieldname;
27   }
28
29   public FieldDescriptor getField() {
30     return field;
31   }
32
33   public ExpressionNode getExpression() {
34     return left;
35   }
36
37   public void setExpression( ExpressionNode en ) {
38         left = en;  
39   }
40   public String printNode(int indent) {
41     return left.printNode(indent)+"."+fieldname;
42   }
43   public int kind() {
44     return Kind.FieldAccessNode;
45   }
46   public TypeDescriptor getType() {
47     return getField().getType();
48   }
49   
50   public void setIsSuper() {
51       this.issuper = true;
52   }
53   
54   public boolean isSuper() {
55       return issuper;
56   }
57
58   public Long evaluate() {
59     // if the field is a constant value then OK
60     eval = null;
61     if(field.isStatic() && field.isFinal()) {
62       eval = field.getExpressionNode().evaluate();
63     } else if (field.isEnum()) {
64       eval = Long.valueOf((long)field.enumValue());
65     }
66     return eval;
67   }
68 }