Array support
[IRC.git] / Robust / src / IR / ClassDescriptor.java
1 package IR;
2 import java.util.*;
3 import IR.Tree.*;
4 import IR.SymbolTable;
5 import IR.FieldDescriptor;
6 import IR.MethodDescriptor;
7 import IR.NameDescriptor;
8
9 public class ClassDescriptor extends Descriptor {
10     public ClassDescriptor(String classname) {
11         super(classname);
12         this.classname=classname;
13         superclass=null;
14         fields=new SymbolTable();
15         methods=new SymbolTable();
16         classid=UIDCount++;
17     }
18     private static int UIDCount=0; 
19     private final int classid;
20     String classname;
21     String superclass;
22     ClassDescriptor superdesc;
23
24     Modifiers modifiers;
25
26     SymbolTable fields;
27     SymbolTable methods;
28
29     public int getId() {
30         return classid;
31     }
32     
33     public Iterator getMethods() {
34         return methods.getDescriptorsIterator();
35     }
36
37     public Iterator getFields() {
38         return fields.getDescriptorsIterator();
39     }
40     
41     public SymbolTable getFieldTable() {
42         return fields;
43     }
44
45     public SymbolTable getMethodTable() {
46         return methods;
47     }
48
49     public String getSafeDescriptor() {
50         return "L"+safename.replace('.','/');
51     }
52
53     public String printTree(State state) {
54         int indent;
55         String st=modifiers.toString()+"class "+classname;
56         if (superclass!=null) 
57             st+="extends "+superclass.toString();
58         st+=" {\n";
59         indent=TreeNode.INDENT;
60         boolean printcr=false;
61
62         for(Iterator it=getFields();it.hasNext();) {
63             FieldDescriptor fd=(FieldDescriptor)it.next();
64             st+=TreeNode.printSpace(indent)+fd.toString()+"\n";
65             printcr=true;
66         }
67         if (printcr)
68             st+="\n";
69
70         for(Iterator it=getMethods();it.hasNext();) {
71             MethodDescriptor md=(MethodDescriptor)it.next();
72             st+=TreeNode.printSpace(indent)+md.toString()+" ";
73             BlockNode bn=state.getMethodBody(md);
74             st+=bn.printNode(indent)+"\n\n";
75         }
76         st+="}\n";
77         return st;
78     }
79
80     public void addField(FieldDescriptor fd) {
81         if (fields.contains(fd.getSymbol()))
82             throw new Error(fd.getSymbol()+" already defined");
83         fields.add(fd);
84     }
85
86     public void addMethod(MethodDescriptor md) {
87         methods.add(md);
88     }
89   
90     public void setModifiers(Modifiers modifiers) {
91         this.modifiers=modifiers;
92     }
93
94     public void setName(String name) {
95         classname=name;
96     }
97
98     public void setSuper(String superclass) {
99         this.superclass=superclass;
100     }
101
102     public ClassDescriptor getSuperDesc() {
103         return superdesc;
104     }
105
106     public void setSuper(ClassDescriptor scd) {
107         this.superdesc=scd;
108     }
109
110     public String getSuper() {
111         return superclass;
112     }
113 }