From c263c1e02119917a9d63ab14db9711c7d1cb4d9d Mon Sep 17 00:00:00 2001 From: adam Date: Wed, 4 Jan 2006 05:27:54 -0500 Subject: [PATCH] checkpoint darcs-hash:20060104102754-5007d-91bd279f856436090e878c0170612db19b95bd7a.gz --- src/edu/berkeley/sbp/GSS.java | 16 +++++++++++++--- src/edu/berkeley/sbp/Parser.java | 24 ++++++++++++++---------- 2 files changed, 27 insertions(+), 13 deletions(-) diff --git a/src/edu/berkeley/sbp/GSS.java b/src/edu/berkeley/sbp/GSS.java index 7bba6a6..77464c2 100644 --- a/src/edu/berkeley/sbp/GSS.java +++ b/src/edu/berkeley/sbp/GSS.java @@ -116,6 +116,11 @@ class GSS { int num = hv.size(); for(int i=0; i 1) + r.reduce(this, null, null); + for(int i=0; i { this.holder = new Forest[numPop]; } public String toString() { return "[reduce " + position + "]"; } - public Forest reduce(Forest f, GSS.Phase.Node parent, GSS.Phase.Node onlychild, GSS.Phase target, Forest rex) { - holder[numPop-1] = f; - return reduce(parent, numPop-2, rex, onlychild, target); - } + public Forest reduce(GSS.Phase.Node parent, GSS.Phase.Node onlychild, Forest rex) { - return reduce(parent, numPop-1, rex, onlychild, parent.phase()); + Forest ret = reduce(parent, numPop-1, rex, onlychild, parent.phase()); + return ret; } private Forest zero = null; @@ -328,11 +326,17 @@ 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) { if (pos>=0) holder[pos] = parent.pending(); - if (pos<=0 && rex==null) { - System.arraycopy(holder, 0, position.holder, 0, holder.length); - rex = position.rewrite(target.getLocation()); - } - if (pos >=0) { + 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); + } else if (pos>0) { if (onlychild != null) reduce(onlychild, pos-1, rex, null, target); else -- 1.7.10.4