intermediate checkpoint
[sbp.git] / src / edu / berkeley / sbp / Forest.java
index 5c09170..ef420a8 100644 (file)
@@ -88,10 +88,13 @@ public abstract class Forest<T> {
         private boolean kcache = false;
         private boolean keep = false;
         public boolean keep() {
+            return true;
+            /*
             if (kcache) return keep;
             kcache = true;
             for(Forest<T> token : tokens) if (!token.valid()) return keep = false;
             return keep = creator==null || (creator.needs.size()==0 && creator.hates.size()==0);
+            */
         }
         public boolean keep(Iterable<Body<T>> h) {
             if (keep()) return true;
@@ -152,12 +155,13 @@ public abstract class Forest<T> {
         }
         public Iterator<Body<T>> iterator() { return ((IterableForest<T>)resolve()).iterator(); }
         public HashSet<Tree<T>> expand(boolean toss) { return resolve().expand(toss); }
-        public boolean valid() { if (valid) return true; resolve(); return valid; }
+        public boolean valid() { return true; /*if (valid) return true; resolve(); return valid;*/ }
         public String toString() { return resolve().toString(); }
         public Forest resolve() {
             if (hp==null) return res;
-            HashSet<Body> results = null;
             FastSet<Body> nh      = new FastSet<Body>();
+            /*
+            HashSet<Body> results = null;
             for(Forest<?> p : hp)
                 for(Body<?> b : (IterableForest<?>)p) {
                     if (b.keep() && (b.creator==null || !b.creator.lame)) {
@@ -180,7 +184,13 @@ public abstract class Forest<T> {
                 }
             }
             hp = null;
-            res = new MultiForest(nh, valid);
+            */
+            for(Forest<?> p : hp)
+                for(Body<?> b : (IterableForest<?>)p)
+                    if (b.creator==null || !b.creator.lame)
+                        b.addTo(nh);
+            res = new MultiForest(nh, nh.size()>0);
+            hp = null;
             return res;
         }
     }
@@ -190,7 +200,7 @@ public abstract class Forest<T> {
     private static class MultiForest<T> extends IterableForest<T> {
         private final FastSet<Body<T>> results;
         private boolean valid;
-        public boolean valid() { return valid; }
+        public boolean valid() { /*return valid;*/ return true; }
         private MultiForest(FastSet<Body<T>> results, boolean valid) { this.results = results; this.valid = valid; }
         public MultiForest(Token.Location loc, T tag, Forest<T>[] tokens, Sequence creator, boolean unwrap, boolean singleton) {
             this.results = new FastSet<Body<T>>(new Body(loc, tag, tokens, creator, unwrap, singleton));