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();
18 private static int UIDCount=0;
19 private final int classid;
22 ClassDescriptor superdesc;
33 public Iterator getMethods() {
34 return methods.getDescriptorsIterator();
37 public Iterator getFields() {
38 return fields.getDescriptorsIterator();
41 public SymbolTable getFieldTable() {
45 public SymbolTable getMethodTable() {
49 public String getSafeDescriptor() {
50 return "L"+safename.replace('.','/');
53 public String printTree(State state) {
55 String st=modifiers.toString()+"class "+classname;
57 st+="extends "+superclass.toString();
59 indent=TreeNode.INDENT;
60 boolean printcr=false;
62 for(Iterator it=getFields();it.hasNext();) {
63 FieldDescriptor fd=(FieldDescriptor)it.next();
64 st+=TreeNode.printSpace(indent)+fd.toString()+"\n";
70 for(Iterator it=getMethods();it.hasNext();) {
71 MethodDescriptor md=(MethodDescriptor)it.next();
72 st+=TreeNode.printSpace(indent)+md.toString()+" ";
73 BlockNode bn=state.getMethodBody(md);
74 st+=bn.printNode(indent)+"\n\n";
80 public void addField(FieldDescriptor fd) {
81 if (fields.contains(fd.getSymbol()))
82 throw new Error(fd.getSymbol()+" already defined");
86 public void addMethod(MethodDescriptor md) {
90 public void setModifiers(Modifiers modifiers) {
91 this.modifiers=modifiers;
94 public void setName(String name) {
98 public void setSuper(String superclass) {
99 this.superclass=superclass;
102 public ClassDescriptor getSuperDesc() {
106 public void setSuper(ClassDescriptor scd) {
110 public String getSuper() {