5 import IR.FieldDescriptor;
6 import IR.MethodDescriptor;
7 import IR.NameDescriptor;
9 public class ClassDescriptor extends Descriptor {
10 public ClassDescriptor(String classname) {
12 this.classname=classname;
14 fields=new SymbolTable();
15 methods=new SymbolTable();
20 ClassDescriptor superdesc;
28 public Iterator getMethods() {
29 return methods.getDescriptorsIterator();
32 public Iterator getFields() {
33 return fields.getDescriptorsIterator();
36 public SymbolTable getFieldTable() {
40 public SymbolTable getMethodTable() {
44 public String printTree(State state) {
46 String st=modifiers.toString()+"class "+classname;
48 st+="extends "+superclass.toString();
50 indent=TreeNode.INDENT;
52 for(Iterator it=getFields();it.hasNext();) {
53 FieldDescriptor fd=(FieldDescriptor)it.next();
54 st+=TreeNode.printSpace(indent)+fd.toString()+"\n";
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";
69 public void addField(FieldDescriptor fd) {
70 if (fields.contains(fd.getSymbol()))
71 throw new Error(fd.getSymbol()+" already defined");
75 public void addMethod(MethodDescriptor md) {
79 public void setModifiers(Modifiers modifiers) {
80 this.modifiers=modifiers;
83 public void setName(String name) {
87 public void setSuper(String superclass) {
88 this.superclass=superclass;
91 public ClassDescriptor getSuperDesc() {
95 public void setSuper(ClassDescriptor scd) {
99 public String getSuper() {