5 import IR.FieldDescriptor;
6 import IR.MethodDescriptor;
7 import IR.NameDescriptor;
9 public class ClassDescriptor extends Descriptor {
10 public ClassDescriptor(String classname) {
12 this.classname=classname;
14 fields=new SymbolTable();
15 methods=new SymbolTable();
18 private static int UIDCount=10; /* 0 is for Arrays */
19 /* For element types we use as defined in TypeDescriptor
20 public static final int BYTE=1;
21 public static final int SHORT=2;
22 public static final int INT=3;
23 public static final int LONG=4;
24 public static final int CHAR=5;
25 public static final int BOOLEAN=6;
26 public static final int FLOAT=7;
27 public static final int DOUBLE=8;*/
29 private final int classid;
32 ClassDescriptor superdesc;
43 public Iterator getMethods() {
44 return methods.getDescriptorsIterator();
47 public Iterator getFields() {
48 return fields.getDescriptorsIterator();
51 public SymbolTable getFieldTable() {
55 public SymbolTable getMethodTable() {
59 public String getSafeDescriptor() {
60 return "L"+safename.replace('.','/');
63 public String printTree(State state) {
65 String st=modifiers.toString()+"class "+classname;
67 st+="extends "+superclass.toString();
69 indent=TreeNode.INDENT;
70 boolean printcr=false;
72 for(Iterator it=getFields();it.hasNext();) {
73 FieldDescriptor fd=(FieldDescriptor)it.next();
74 st+=TreeNode.printSpace(indent)+fd.toString()+"\n";
80 for(Iterator it=getMethods();it.hasNext();) {
81 MethodDescriptor md=(MethodDescriptor)it.next();
82 st+=TreeNode.printSpace(indent)+md.toString()+" ";
83 BlockNode bn=state.getMethodBody(md);
84 st+=bn.printNode(indent)+"\n\n";
90 public void addField(FieldDescriptor fd) {
91 if (fields.contains(fd.getSymbol()))
92 throw new Error(fd.getSymbol()+" already defined");
96 public void addMethod(MethodDescriptor md) {
100 public void setModifiers(Modifiers modifiers) {
101 this.modifiers=modifiers;
104 public void setName(String name) {
108 public void setSuper(String superclass) {
109 this.superclass=superclass;
112 public ClassDescriptor getSuperDesc() {
116 public void setSuper(ClassDescriptor scd) {
120 public String getSuper() {