From: adam Date: Wed, 4 Jan 2006 11:00:13 +0000 (-0500) Subject: checkpoint X-Git-Tag: tag_for_25-Mar~441 X-Git-Url: http://git.megacz.com/?p=sbp.git;a=commitdiff_plain;h=8e38701ecbc92deab21c4c224052ae128b279738;hp=7d87b6f9aa045ec7e4a802a88240a235c5fde5a3;ds=sidebyside checkpoint darcs-hash:20060104110013-5007d-a14d2a070de50628ba2b3ab972497086462de328.gz --- diff --git a/src/edu/berkeley/sbp/Parser.java b/src/edu/berkeley/sbp/Parser.java index a24c523..1afa523 100644 --- a/src/edu/berkeley/sbp/Parser.java +++ b/src/edu/berkeley/sbp/Parser.java @@ -313,12 +313,13 @@ public abstract class Parser { 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 { 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 { } // 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); }