package IR.Tree; import IR.NameDescriptor; import IR.Descriptor; import IR.VarDescriptor; import IR.TagVarDescriptor; import IR.TypeDescriptor; import IR.FieldDescriptor; public class NameNode extends ExpressionNode { NameDescriptor name; Descriptor vd; FieldDescriptor fd; ExpressionNode en; public NameNode(NameDescriptor nd) { this.name=nd; this.vd=null; this.fd=null; } public ExpressionNode getExpression() { return en; } /* 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 return ((VarDescriptor)vd).getType(); } NameDescriptor getName() { return name; } public String printNode(int indent) { return name.toString(); } public int kind() { return Kind.NameNode; } }