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