checkpoint
authoradam <adam@megacz.com>
Wed, 4 Jan 2006 11:01:27 +0000 (06:01 -0500)
committeradam <adam@megacz.com>
Wed, 4 Jan 2006 11:01:27 +0000 (06:01 -0500)
darcs-hash:20060104110127-5007d-8d5311fa94d603d02ec275421c7d8dddfcca9bdd.gz

src/edu/berkeley/sbp/Parser.java

index 1afa523..65f3dc3 100644 (file)
@@ -339,20 +339,14 @@ 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 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());
-                    }
-                    for(GSS.Phase.Node child : parent.parents())
-                        reduce(child, pos-1, rex, target);
-                } else if (pos>0) {
-                    for(GSS.Phase.Node child : parent.parents())
-                        reduce(child, pos-1, rex, target);
-                } else {
-                    return finish(parent, rex, target);
+                if (pos<0) return finish(parent, rex, target);
+                holder[pos] = parent.pending();
+                if (pos==0 && rex==null) {
+                    System.arraycopy(holder, 0, position.holder, 0, holder.length);
+                    rex = position.rewrite(target.getLocation());
                 }
+                for(GSS.Phase.Node child : parent.parents())
+                    reduce(child, pos-1, rex, target);
                 return rex;
             }
             private Forest finish(GSS.Phase.Node parent, Forest result, GSS.Phase target) {