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 ecd731b96edeeeb27142ebb3f4066522ddc1cc7c..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;
-    VarDescriptor vd;
-    FieldDescriptor fd;
-
-    public NameNode(NameDescriptor nd) {
-       this.name=nd;
-       this.vd=null;
-       this.fd=null;
-    }
-
-    public void setVar(VarDescriptor vd) {
-       this.vd=vd;
-    }
-
-    public void setField(FieldDescriptor fd) {
-       this.fd=fd;
-    }
-
-    public TypeDescriptor getType() {
-       if (vd!=null)
-           return vd.getType();
-       else
-           return fd.getType();
-    }
-
-    NameDescriptor getName() {
-       return name;
-    }
-
-    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;
+  }
 }