checking in changes
[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     Modifiers modifiers;
21
22     SymbolTable fields;
23     SymbolTable methods;
24
25     
26     public Iterator getMethods() {
27         return methods.getDescriptorsIterator();
28     }
29
30     public Iterator getFields() {
31         return fields.getDescriptorsIterator();
32     }
33     
34     public SymbolTable getFieldTable() {
35         return fields;
36     }
37
38     public String printTree(State state) {
39         int indent;
40         String st=modifiers.toString()+"class "+classname;
41         if (superclass!=null) 
42             st+="extends "+superclass.toString();
43         st+=" {\n";
44         indent=TreeNode.INDENT;
45         
46         for(Iterator it=getFields();it.hasNext();) {
47             FieldDescriptor fd=(FieldDescriptor)it.next();
48             st+=TreeNode.printSpace(indent)+fd.toString()+"\n";
49         }
50         if (fields.size()>0)
51             st+="\n";
52
53         for(Iterator it=getMethods();it.hasNext();) {
54             MethodDescriptor md=(MethodDescriptor)it.next();
55             st+=TreeNode.printSpace(indent)+md.toString()+" ";
56             BlockNode bn=state.getMethodBody(md);
57             st+=bn.printNode(indent)+"\n\n";
58         }
59         st+="}\n";
60         return st;
61     }
62
63     public void addField(FieldDescriptor fd) {
64         if (fields.contains(fd.getSymbol()))
65             throw new Error(fd.getSymbol()+" already defined");
66         fields.add(fd);
67     }
68
69     public void addMethod(MethodDescriptor md) {
70         methods.add(md);
71     }
72   
73     public void setModifiers(Modifiers modifiers) {
74         this.modifiers=modifiers;
75     }
76
77     public void setName(String name) {
78         classname=name;
79     }
80
81     public void setSuper(String superclass) {
82         this.superclass=superclass;
83     }
84 }