Change tabbing for everything....
[IRC.git] / Robust / src / IR / SymbolTable.java
1 package IR;
2
3 import java.util.*;
4
5 public class SymbolTable {
6
7   private Hashtable table;
8   private SymbolTable parent;
9   private HashSet valueset;
10
11   public SymbolTable() {
12     table = new Hashtable();
13     valueset = new HashSet();
14     this.parent = null;
15   }
16
17   public SymbolTable(SymbolTable parent) {
18     table = new Hashtable();
19     this.parent = parent;
20   }
21
22   public void add(Descriptor d) {
23     add(d.getSymbol(), d);
24   }
25
26   public void add(String name, Descriptor d) {
27     if (!table.containsKey(name))
28       table.put(name, new HashSet());
29     HashSet hs=(HashSet)table.get(name);
30     hs.add(d);
31     valueset.add(d);
32   }
33
34   public Set getSet(String name) {
35     return getPSet(name);
36   }
37
38   private HashSet getPSet(String name) {
39     HashSet hs=null;
40     if (parent!=null)
41       hs=parent.getPSet(name);
42     else
43       hs=new HashSet();
44     if (table.containsKey(name)) {
45       hs.addAll((HashSet)table.get(name));
46     }
47     return hs;
48   }
49
50   public Set getSetFromSameScope(String name) {
51     return getPSetFromSameScope(name);
52   }
53
54   private HashSet getPSetFromSameScope(String name) {
55     if (table.containsKey(name)) {
56       HashSet hs=(HashSet)table.get(name);
57       return hs;
58     } else
59       return new HashSet();
60   }
61
62   public Descriptor get(String name) {
63     Descriptor d = getFromSameScope(name);
64     if (d == null && parent != null) {
65       return parent.get(name);
66     } else {
67       return d;
68     }
69   }
70
71   public Descriptor getFromSameScope(String name) {
72     if (table.containsKey(name)) {
73       HashSet hs=(HashSet) table.get(name);
74       return (Descriptor) hs.iterator().next();
75     } else
76       return null;
77
78   }
79
80   public Enumeration getNames() {
81     return table.keys();
82   }
83
84   public Iterator getNamesIterator() {
85     return table.keySet().iterator();
86   }
87
88   public Set getValueSet() {
89     return valueset;
90   }
91
92   public Iterator getDescriptorsIterator() {
93     return getValueSet().iterator();
94   }
95
96   public Set getAllValueSet() {
97     HashSet hs=null;
98     if (parent!=null)
99       hs=(HashSet) parent.getAllValueSet();
100     else
101       hs=new HashSet();
102     hs.addAll(valueset);
103     return hs;
104   }
105
106   public Iterator getAllDescriptorsIterator() {
107     return getAllValueSet().iterator();
108   }
109
110   public boolean contains(String name) {
111     return (get(name) != null);
112   }
113
114   public SymbolTable getParent() {
115     return parent;
116   }
117
118   public void setParent(SymbolTable parent) {
119     this.parent = parent;
120   }
121
122   public String toString() {
123     return "ST: " + table.toString();
124   }
125 }