Changes to build code
[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     }
17
18     String classname;
19     String superclass;
20     ClassDescriptor superdesc;
21
22     Modifiers modifiers;
23
24     SymbolTable fields;
25     SymbolTable methods;
26
27     
28     public Iterator getMethods() {
29         return methods.getDescriptorsIterator();
30     }
31
32     public Iterator getFields() {
33         return fields.getDescriptorsIterator();
34     }
35     
36     public SymbolTable getFieldTable() {
37         return fields;
38     }
39
40     public SymbolTable getMethodTable() {
41         return methods;
42     }
43
44     public String getSafeDescriptor() {
45         return "L"+safename.replace('.','/');
46     }
47
48     public String printTree(State state) {
49         int indent;
50         String st=modifiers.toString()+"class "+classname;
51         if (superclass!=null) 
52             st+="extends "+superclass.toString();
53         st+=" {\n";
54         indent=TreeNode.INDENT;
55         boolean printcr=false;
56
57         for(Iterator it=getFields();it.hasNext();) {
58             FieldDescriptor fd=(FieldDescriptor)it.next();
59             st+=TreeNode.printSpace(indent)+fd.toString()+"\n";
60             printcr=true;
61         }
62         if (printcr)
63             st+="\n";
64
65         for(Iterator it=getMethods();it.hasNext();) {
66             MethodDescriptor md=(MethodDescriptor)it.next();
67             st+=TreeNode.printSpace(indent)+md.toString()+" ";
68             BlockNode bn=state.getMethodBody(md);
69             st+=bn.printNode(indent)+"\n\n";
70         }
71         st+="}\n";
72         return st;
73     }
74
75     public void addField(FieldDescriptor fd) {
76         if (fields.contains(fd.getSymbol()))
77             throw new Error(fd.getSymbol()+" already defined");
78         fields.add(fd);
79     }
80
81     public void addMethod(MethodDescriptor md) {
82         methods.add(md);
83     }
84   
85     public void setModifiers(Modifiers modifiers) {
86         this.modifiers=modifiers;
87     }
88
89     public void setName(String name) {
90         classname=name;
91     }
92
93     public void setSuper(String superclass) {
94         this.superclass=superclass;
95     }
96
97     public ClassDescriptor getSuperDesc() {
98         return superdesc;
99     }
100
101     public void setSuper(ClassDescriptor scd) {
102         this.superdesc=scd;
103     }
104
105     public String getSuper() {
106         return superclass;
107     }
108 }