Change tabbing for everything....
[IRC.git] / Robust / src / IR / SymbolTable.java
index 7203183e1a0c27f32b58bcfea3a19cb22a5bf19c..ed1d1337c2d81791be6249bb0c477e6885e0c311 100644 (file)
@@ -4,137 +4,122 @@ import java.util.*;
 
 public class SymbolTable {
 
-    private Hashtable table;
-    private SymbolTable parent;
-  
-    public SymbolTable() {
-       table = new Hashtable();
-       this.parent = null;
-    }
-
-    public SymbolTable(SymbolTable parent) {
-       table = new Hashtable();
-       this.parent = parent;
-    }
-
-    //public void add(String name, Descriptor d) {
-       //table.put(name, d);
-    //}
-
-    public void add(Descriptor d) {
-       table.put(d.getSymbol(), d);
-    }
-    
-    public void add(String name, Descriptor d) {
-       table.put(name, d);
-       
-    }
-
-    public void dump() {
-       Enumeration e = getDescriptors();
-       while (e.hasMoreElements()) {
-           Descriptor d = (Descriptor) e.nextElement();
-           System.out.println(d.getSymbol());
-       }
-       if (parent != null) {
-           System.out.println("parent:");
-           parent.dump();
-       }
-    }
-    
-    public Descriptor get(String name) {
-       Descriptor d = (Descriptor) table.get(name);
-       if (d == null && parent != null) {
-           return parent.get(name);
-       } else {
-           return d;
-       }
-    }
-
-    public Descriptor getFromSameScope(String name) {
-       return (Descriptor)table.get(name);
-    }
-    
-    public Enumeration getNames() {
-       return table.keys();
-    }
-
-    public Enumeration getDescriptors() {
-       return table.elements();
-    }
-
-    public Iterator descriptors() {
-        return table.values().iterator();
-    }
-
-    public Vector getAllDescriptors() {
-       Vector d;
-       if (parent == null) {
-           d = new Vector();
-       } else {
-           d = parent.getAllDescriptors();
-       }
-
-       Enumeration e = getDescriptors();
-       while(e.hasMoreElements()) {
-           d.addElement(e.nextElement());
-       }
-
-       return d;
-    }
-
-    public boolean contains(String name) {
-        return (get(name) != null);
-    }
-           
-       
-    public int size() {
-       return table.size();
-    }
-
-    public int sizeAll() {
-       if (parent != null) {
-           return parent.sizeAll() + table.size();
-       } else {
-           return table.size();
-       }
-    }
-
-    public SymbolTable getParent() {
-       return parent;
-    }
-    
-    public void setParent(SymbolTable parent) {
-       this.parent = parent;
-    }
-
-    /**
-     * Adds contents of st2.table to this.table and returns a
-     * Vector of shared names, unless there are no shared names,
-     * in which case returns null.
-     */
-    public Vector merge(SymbolTable st2) {
-        Vector v = new Vector();
-        Enumeration names = st2.table.keys();
-
-        while (names.hasMoreElements()) {
-            Object o = names.nextElement();
-
-            if (table.containsKey(o)) {
-                v.addElement(o);
-            } else {
-                table.put(o, st2.table.get(o));
-            }
-        }
-
-        if (v.size() == 0) {
-            return null;
-        } else {
-            return v;
-        }
-    }
-
-    public String toString() {
-        return "ST: " + table.toString();               
-    }
+  private Hashtable table;
+  private SymbolTable parent;
+  private HashSet valueset;
+
+  public SymbolTable() {
+    table = new Hashtable();
+    valueset = new HashSet();
+    this.parent = null;
+  }
+
+  public SymbolTable(SymbolTable parent) {
+    table = new Hashtable();
+    this.parent = parent;
+  }
+
+  public void add(Descriptor d) {
+    add(d.getSymbol(), d);
+  }
+
+  public void add(String name, Descriptor d) {
+    if (!table.containsKey(name))
+      table.put(name, new HashSet());
+    HashSet hs=(HashSet)table.get(name);
+    hs.add(d);
+    valueset.add(d);
+  }
+
+  public Set getSet(String name) {
+    return getPSet(name);
+  }
+
+  private HashSet getPSet(String name) {
+    HashSet hs=null;
+    if (parent!=null)
+      hs=parent.getPSet(name);
+    else
+      hs=new HashSet();
+    if (table.containsKey(name)) {
+      hs.addAll((HashSet)table.get(name));
+    }
+    return hs;
+  }
+
+  public Set getSetFromSameScope(String name) {
+    return getPSetFromSameScope(name);
+  }
+
+  private HashSet getPSetFromSameScope(String name) {
+    if (table.containsKey(name)) {
+      HashSet hs=(HashSet)table.get(name);
+      return hs;
+    } else
+      return new HashSet();
+  }
+
+  public Descriptor get(String name) {
+    Descriptor d = getFromSameScope(name);
+    if (d == null && parent != null) {
+      return parent.get(name);
+    } else {
+      return d;
+    }
+  }
+
+  public Descriptor getFromSameScope(String name) {
+    if (table.containsKey(name)) {
+      HashSet hs=(HashSet) table.get(name);
+      return (Descriptor) hs.iterator().next();
+    } else
+      return null;
+
+  }
+
+  public Enumeration getNames() {
+    return table.keys();
+  }
+
+  public Iterator getNamesIterator() {
+    return table.keySet().iterator();
+  }
+
+  public Set getValueSet() {
+    return valueset;
+  }
+
+  public Iterator getDescriptorsIterator() {
+    return getValueSet().iterator();
+  }
+
+  public Set getAllValueSet() {
+    HashSet hs=null;
+    if (parent!=null)
+      hs=(HashSet) parent.getAllValueSet();
+    else
+      hs=new HashSet();
+    hs.addAll(valueset);
+    return hs;
+  }
+
+  public Iterator getAllDescriptorsIterator() {
+    return getAllValueSet().iterator();
+  }
+
+  public boolean contains(String name) {
+    return (get(name) != null);
+  }
+
+  public SymbolTable getParent() {
+    return parent;
+  }
+
+  public void setParent(SymbolTable parent) {
+    this.parent = parent;
+  }
+
+  public String toString() {
+    return "ST: " + table.toString();
+  }
 }