tentative checkpoint
authoradam <adam@megacz.com>
Mon, 29 May 2006 21:36:32 +0000 (17:36 -0400)
committeradam <adam@megacz.com>
Mon, 29 May 2006 21:36:32 +0000 (17:36 -0400)
darcs-hash:20060529213632-5007d-41e55b3906c6c31f5bf8e8d622adeb11b80af659.gz

src/edu/berkeley/sbp/GSS.java
src/edu/berkeley/sbp/misc/MetaGrammarTree.java

index bde44df..0718a10 100644 (file)
@@ -376,18 +376,17 @@ class GSS {
             */
             public void reduce(Position r, int pos, Phase target, Forest[] holder, Node only, Forest pending) {
                 Forest old = holder[pos];
-                holder[pos] = pending;
-                if (pos==0) {
-
-                    // FIXME: I'm unsure about this -- basically we want to deal with the case where
-                    //        there are two nodes, each of whose Ref points to the same Forest instance.
-                    //        Some node in the next phase has both of these as parents.  This might happen
-                    //        since the same reduction can appear in more than one state.
-
-                    for(Forest result : results())
-                        for(Node child : ((Forest.Ref<?>)result).parents) {
-                            if (only != null && child!=only) continue;
-                            pending = holder[pos] = result;
+
+                // FIXME: I'm unsure about this -- basically we want to deal with the case where
+                //        there are two nodes, each of whose Ref points to the same Forest instance.
+                //        Some node in the next phase has both of these as parents.  This might happen
+                //        since the same reduction can appear in more than one state.
+                
+                for(Forest result : results())
+                    for(Node child : ((Forest.Ref<?>)result).parents) {
+                        if (only != null && child!=only) continue;
+                        pending = holder[pos] = result;
+                        if (pos==0) {
                             System.arraycopy(holder, 0, r.holder, 0, holder.length);
                             for(int i=0; i<r.pos; i++) if (r.holder[i]==null) throw new Error("realbad");
                             Forest rex = null;
@@ -397,15 +396,11 @@ class GSS {
                                 if (r.pos==1) singularReductions.put(pending, r, rex);
                             }
                             child.finish(r, rex, target, holder);
-                        }
-                } else {
-                    for(Forest result : results())
-                        for(Node child : ((Forest.Ref<?>)result).parents) {
-                            if (only!=null && child!=only) continue;
-                            holder[pos] = result;
+                        } else {
                             child.reduce(r, pos-1, target, holder, null, null);
                         }
-                }
+                    }
+
                 holder[pos] = old;
             }
 
index 70b2318..eaf4b88 100644 (file)
@@ -68,6 +68,7 @@ public class MetaGrammarTree {
 
 
 
+
         // DO NOT EDIT STUFF BELOW: IT IS AUTOMATICALLY GENERATED
 new edu.berkeley.sbp.Tree(null, "grammar", new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, null, new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, "=", new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, null, new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, "G", new edu.berkeley.sbp.Tree[] { }),
         new edu.berkeley.sbp.Tree(null, "r", new edu.berkeley.sbp.Tree[] { }),
@@ -612,3 +613,4 @@ new edu.berkeley.sbp.Tree(null, "grammar", new edu.berkeley.sbp.Tree[] { new edu
 
 
 
+