Add support for 'static' fields in multicore gc version w/o tasks. Now we can have...
[IRC.git] / Robust / src / IR / Tree / NameNode.java
index 79885640a6894de4bb61743fdaf09839fdfba5ad..e2634647c804fdb10b02f34c02684c070614f317 100644 (file)
 package IR.Tree;
 import IR.NameDescriptor;
+import IR.Descriptor;
+import IR.VarDescriptor;
+import IR.TagVarDescriptor;
+import IR.TypeDescriptor;
+import IR.FieldDescriptor;
+import IR.ClassDescriptor;
 
 public class NameNode extends ExpressionNode {
-    NameDescriptor name;
-    public NameNode(NameDescriptor nd) {
-       this.name=nd;
-    }
-
-    public String printNode(int indent) {
-       return name.toString();
-    }
-    public int kind() {
-       return Kind.NameNode;
-    }
+  NameDescriptor name;
+  Descriptor vd;
+  FieldDescriptor fd;
+  ExpressionNode en;
+  ClassDescriptor cd;
+
+  public NameNode(NameDescriptor nd) {
+    this.name=nd;
+    this.vd=null;
+    this.fd=null;
+    this.cd = null;
+  }
+
+  public ExpressionNode getExpression() {
+    return en;
+  }
+  
+  public ClassDescriptor getClassDesc() {
+    return this.cd;
+  }
+  
+  public void setClassDesc(ClassDescriptor cd) {
+    this.cd = cd;
+  }
+
+  /* Gross hack */
+  public void setExpression(ExpressionNode en) {
+    this.en=en;
+  }
+
+  public void setVar(Descriptor vd) {
+    this.vd=vd;
+  }
+
+  public void setField(FieldDescriptor fd) {
+    this.fd=fd;
+  }
+
+  public FieldDescriptor getField() {
+    return fd;
+  }
+
+  public boolean isTag() {
+    return (vd instanceof TagVarDescriptor);
+  }
+
+  public VarDescriptor getVar() {
+    return (VarDescriptor) vd;
+  }
+
+  public TagVarDescriptor getTagVar() {
+    return (TagVarDescriptor) vd;
+  }
+
+  public TypeDescriptor getType() {
+    if (en!=null)
+      return en.getType();
+    else if (fd!=null) {
+      return fd.getType();
+    } else if (isTag())
+      return new TypeDescriptor(TypeDescriptor.TAG);
+    else if(cd != null) {
+      TypeDescriptor tp = new TypeDescriptor(cd);
+      tp.setStatic();
+      return tp;
+    } else
+      return ((VarDescriptor)vd).getType();
+  }
+  
+  public TypeDescriptor getClassType() {
+    if(cd != null) {
+      TypeDescriptor tp = new TypeDescriptor(cd);
+      tp.setStatic();
+      return tp;
+    } else
+      return null;
+  }
+
+  NameDescriptor getName() {
+    return name;
+  }
+
+  public String printNode(int indent) {
+    return name.toString();
+  }
+
+  public int kind() {
+    return Kind.NameNode;
+  }
 }