Finish semantic checks
[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 printTree(State state) {
45         int indent;
46         String st=modifiers.toString()+"class "+classname;
47         if (superclass!=null) 
48             st+="extends "+superclass.toString();
49         st+=" {\n";
50         indent=TreeNode.INDENT;
51         boolean printcr=false;
52
53         for(Iterator it=getFields();it.hasNext();) {
54             FieldDescriptor fd=(FieldDescriptor)it.next();
55             st+=TreeNode.printSpace(indent)+fd.toString()+"\n";
56             printcr=true;
57         }
58         if (printcr)
59             st+="\n";
60
61         for(Iterator it=getMethods();it.hasNext();) {
62             MethodDescriptor md=(MethodDescriptor)it.next();
63             st+=TreeNode.printSpace(indent)+md.toString()+" ";
64             BlockNode bn=state.getMethodBody(md);
65             st+=bn.printNode(indent)+"\n\n";
66         }
67         st+="}\n";
68         return st;
69     }
70
71     public void addField(FieldDescriptor fd) {
72         if (fields.contains(fd.getSymbol()))
73             throw new Error(fd.getSymbol()+" already defined");
74         fields.add(fd);
75     }
76
77     public void addMethod(MethodDescriptor md) {
78         methods.add(md);
79     }
80   
81     public void setModifiers(Modifiers modifiers) {
82         this.modifiers=modifiers;
83     }
84
85     public void setName(String name) {
86         classname=name;
87     }
88
89     public void setSuper(String superclass) {
90         this.superclass=superclass;
91     }
92
93     public ClassDescriptor getSuperDesc() {
94         return superdesc;
95     }
96
97     public void setSuper(ClassDescriptor scd) {
98         this.superdesc=scd;
99     }
100
101     public String getSuper() {
102         return superclass;
103     }
104 }