summaryrefslogtreecommitdiff
path: root/sources/scalac/symtab/SymSet.java
diff options
context:
space:
mode:
Diffstat (limited to 'sources/scalac/symtab/SymSet.java')
-rw-r--r--sources/scalac/symtab/SymSet.java24
1 files changed, 24 insertions, 0 deletions
diff --git a/sources/scalac/symtab/SymSet.java b/sources/scalac/symtab/SymSet.java
index f72b9764f5..6911b75c06 100644
--- a/sources/scalac/symtab/SymSet.java
+++ b/sources/scalac/symtab/SymSet.java
@@ -35,6 +35,30 @@ public class SymSet {
}
}
+ public SymSet excl(Symbol sym) {
+ if (sym == this.sym) {
+ if (l == EMPTY) return r;
+ if (r == EMPTY) return l;
+ SymSet m = r;
+ if (m.l != EMPTY) {
+ SymSet p;
+ do {
+ p = m;
+ m = m.l;
+ } while (m.l != EMPTY);
+ p.l = m.r;
+ m.r = r;
+ }
+ m.l = l;
+ return m;
+ } else if (sym.isLess(this.sym)) {
+ return new SymSet(this.sym, l.excl(sym), r);
+ } else {
+ assert this.sym.isLess(sym);
+ return new SymSet(this.sym, l, r.excl(sym));
+ }
+ }
+
/** Is `sym' an element of this set?
*/
public boolean contains(Symbol sym) {