checkpoint
authoradam <adam@megacz.com>
Wed, 4 Jan 2006 11:00:13 +0000 (06:00 -0500)
committeradam <adam@megacz.com>
Wed, 4 Jan 2006 11:00:13 +0000 (06:00 -0500)
darcs-hash:20060104110013-5007d-a14d2a070de50628ba2b3ab972497086462de328.gz

src/edu/berkeley/sbp/Parser.java

index a24c523..1afa523 100644 (file)
@@ -313,12 +313,13 @@ public abstract class Parser<T extends Token, R> {
 
             public Forest reduce(GSS.Phase.Node parent) {
                 if (numPop==0) return finish(parent, zero(), parent.phase());
-                return reduce(parent, numPop-1, null, null, parent.phase());
+                return reduce(parent, numPop-1, null, parent.phase());
             }
 
             public Forest reduce(GSS.Phase.Node parent, GSS.Phase.Node onlychild) {
+                if (numPop<=0) throw new Error("called wrong form of reduce()");
                 int pos = numPop-1;
-                if (pos>=0) holder[pos] = parent.pending();
+                holder[pos] = parent.pending();
                 Forest rex = null;
                 if (pos==0) {
                     if (rex==null) {
@@ -326,7 +327,7 @@ public abstract class Parser<T extends Token, R> {
                         rex = position.rewrite(parent.phase().getLocation());
                     }
                 }
-                return reduce(onlychild, pos-1, rex, null, parent.phase());
+                return reduce(onlychild, pos-1, rex, parent.phase());
             }
 
             private Forest zero = null;
@@ -337,24 +338,18 @@ public abstract class Parser<T extends Token, R> {
             }
 
             // FIXME: this could be more elegant and/or cleaner and/or somewhere else
-            private Forest reduce(GSS.Phase.Node parent, int pos, Forest rex, GSS.Phase.Node onlychild, GSS.Phase target) {
+            private Forest reduce(GSS.Phase.Node parent, int pos, Forest rex, GSS.Phase target) {
                 if (pos>=0) holder[pos] = parent.pending();
                 if (pos==0) {
                     if (rex==null) {
                         System.arraycopy(holder, 0, position.holder, 0, holder.length);
                         rex = position.rewrite(target.getLocation());
                     }
-                    if (onlychild != null)
-                        reduce(onlychild, pos-1, rex, null, target);
-                    else 
-                        for(GSS.Phase.Node child : parent.parents())
-                            reduce(child, pos-1, rex, null, target);
+                    for(GSS.Phase.Node child : parent.parents())
+                        reduce(child, pos-1, rex, target);
                 } else if (pos>0) {
-                    if (onlychild != null)
-                        reduce(onlychild, pos-1, rex, null, target);
-                    else 
-                        for(GSS.Phase.Node child : parent.parents())
-                            reduce(child, pos-1, rex, null, target);
+                    for(GSS.Phase.Node child : parent.parents())
+                        reduce(child, pos-1, rex, target);
                 } else {
                     return finish(parent, rex, target);
                 }