updates
[IRC.git] / Robust / src / IR / TypeUtil.java
1 package IR;
2 import java.util.*;
3
4 public class TypeUtil {
5     public static final String StringClass="java.lang.String";
6     State state;
7     Hashtable supertable;
8
9     public TypeUtil(State state) {
10         this.state=state;
11         createTables();
12     }
13
14     public ClassDescriptor getClass(String classname) {
15         ClassDescriptor cd=(ClassDescriptor)state.getClassSymbolTable().get(classname);
16         return cd;
17     }
18
19     private void createTables() {
20         supertable=new Hashtable();
21         Iterator classit=state.getClassSymbolTable().getDescriptorsIterator();
22         while(classit.hasNext()) {
23             ClassDescriptor cd=(ClassDescriptor)classit.next();
24             String superc=cd.getSuper();
25             if (superc!=null) {
26                 ClassDescriptor cd_super=getClass(superc);
27                 supertable.put(cd,cd_super);
28             }
29         }
30     }
31
32     public ClassDescriptor getSuper(ClassDescriptor cd) {
33         return (ClassDescriptor)supertable.get(cd);
34     }
35
36     public boolean isSuperorType(ClassDescriptor possiblesuper, ClassDescriptor cd2) {
37         if (possiblesuper==cd2)
38             return true;
39         else
40             return isSuper(possiblesuper, cd2);
41     }
42
43     public boolean isSuper(ClassDescriptor possiblesuper, ClassDescriptor cd2) {
44         while(cd2!=null) {
45             cd2=getSuper(cd2);
46             if (cd2==possiblesuper)
47                 return true;
48         }
49         return false;
50     }
51 }