X-Git-Url: http://git.megacz.com/?p=sbp.git;a=blobdiff_plain;f=src%2Fedu%2Fberkeley%2Fsbp%2FGSS.java;h=5847d6ba32a261709b3629a2e3653e5232b037c1;hp=0d343a9fa93498a41792cafa3a83de951f603b34;hb=69965bfd571a733f573e2adc7fae06a653c83cae;hpb=b2d396676e77fb8777865258f84dfb8f8a2dbcad diff --git a/src/edu/berkeley/sbp/GSS.java b/src/edu/berkeley/sbp/GSS.java index 0d343a9..5847d6b 100644 --- a/src/edu/berkeley/sbp/GSS.java +++ b/src/edu/berkeley/sbp/GSS.java @@ -122,7 +122,6 @@ class GSS { for(int i=0; i cache = null; - /** the set of nodes to which there is an edge starting at this node */ //public final FastSet parents = new FastSet(); /* ALLOC */ @@ -198,53 +195,27 @@ class GSS { /** which Phase this Node belongs to (node that Node is also a non-static inner class of Phase) */ public Phase phase() { return Phase.this; } - public HashMap cache() { - return cache==null ? (cache = new HashMap()) : cache; - } public Forest.Ref holder() { return holder==null ? (holder = new Forest.Ref()) : holder; } public Forest pending() { return Phase.this.closed ? holder().resolve() : holder; } public FastSet parents() { return this; } - /** FIXME */ public void queueReductions() { if (allqueued) return; allqueued = true; int where = parents().size(); - for(Parser.Table.Reduction r : token==null ? state.getEofReductions() : state.getReductions(token)) + for(Parser.Table.Reduction r : state.getReductions(token)) if (r.numPop >= 1) r.reduce(this, null, null); } - /** FIXME */ - public void queueReductions(Node n2) { queueReductions(n2, true); } - public void queueReductions(Node n2, boolean includeLongs) { + public void queueReductions(Node n2) { if (!allqueued) { queueReductions(); return; } - Node n = this; - for(Parser.Table.Reduction r : token==null ? n.state.getEofReductions() : n.state.getReductions(token)) { - - // UGLY HACK - // The problem here is that a "reduction of length 1" - // performed twice with different values of n2 needs - // to only create a *single* new result, but must add - // multiple parents to the node holding that result. - // The current reducer doesn't differentiate between - // the next node of an n-pop reduction and the - // ultimate parent of the last pop, so we need to - // cache instances here as a way of avoiding - // recreating them. - if (r.numPop <= 0) continue; - if (r.numPop == 1) { - Forest ret = n.cache().get(r); - if (ret != null) r.reduce(this, n2, ret); - else n.cache().put(r, r.reduce(this, n2, null)); - } else { + for(Parser.Table.Reduction r : state.getReductions(token)) + if (r.numPop > 0) r.reduce(this, n2, null); - } - } } - /** FIXME */ public void queueEmptyReductions() { if (reducing) for(Parser.Table.Reduction r : token==null ? state.getEofReductions() : state.getReductions(token))