Fix the bug of assignment conversion: 'short s = 12' should be allowed. And for such...
[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 String printNode(int indent) {
32     return left.printNode(indent)+"."+fieldname;
33   }
34   public int kind() {
35     return Kind.FieldAccessNode;
36   }
37   public TypeDescriptor getType() {
38     return getField().getType();
39   }
40
41   public Long evaluate() {
42     // if the field is a constant value then OK
43     eval = null;
44     if(field.isStatic() && field.isFinal()) {
45       eval = field.getExpressionNode().evaluate();
46     } else if (field.isEnum()) {
47       eval = Long.valueOf((long)field.enumValue());
48     }
49     return eval;
50   }
51 }