Handling the case NAME DOT THIS for inner classes
[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
10   public FieldAccessNode(ExpressionNode l, String field) {
11     fieldname=field;
12     left=l;
13   }
14
15   public void setField(FieldDescriptor fd) {
16     field=fd;
17   }
18
19   public String getFieldName() {
20     return fieldname;
21   }
22
23   public FieldDescriptor getField() {
24     return field;
25   }
26
27   public ExpressionNode getExpression() {
28     return left;
29   }
30
31   public void setExpression( ExpressionNode en ) {
32         left = en;  
33   }
34   public String printNode(int indent) {
35     return left.printNode(indent)+"."+fieldname;
36   }
37   public int kind() {
38     return Kind.FieldAccessNode;
39   }
40   public TypeDescriptor getType() {
41     return getField().getType();
42   }
43
44   public Long evaluate() {
45     // if the field is a constant value then OK
46     eval = null;
47     if(field.isStatic() && field.isFinal()) {
48       eval = field.getExpressionNode().evaluate();
49     } else if (field.isEnum()) {
50       eval = Long.valueOf((long)field.enumValue());
51     }
52     return eval;
53   }
54 }