From: adam Date: Thu, 12 Jan 2006 06:37:55 +0000 (-0500) Subject: added back in the singularReductions cache, I wish we didnt need it but we do X-Git-Tag: tag_for_25-Mar~391 X-Git-Url: http://git.megacz.com/?p=sbp.git;a=commitdiff_plain;h=06d4d872050cac83ebd1a0abbf0e00d18ed3c44d added back in the singularReductions cache, I wish we didnt need it but we do darcs-hash:20060112063755-5007d-68fda2bdf3cc12ac63c2a02feb2a49a571dc2024.gz --- diff --git a/src/edu/berkeley/sbp/GSS.java b/src/edu/berkeley/sbp/GSS.java index 5bfbd52..7408eba 100644 --- a/src/edu/berkeley/sbp/GSS.java +++ b/src/edu/berkeley/sbp/GSS.java @@ -37,6 +37,7 @@ class GSS { boolean reducing; private IntPairMap hash; /* ALLOC */ + private IntPairMap singularReductions; /* ALLOC */ private boolean closed; private boolean good; private Phase next = null; @@ -61,6 +62,7 @@ class GSS { waiting.clear(); performed.clear(); hash = new IntPairMap(); + singularReductions = new IntPairMap(); good = false; closed = false; reducing = false; @@ -205,7 +207,10 @@ class GSS { /** perform all shift operations, adding promoted nodes to next */ public void shift(Phase next, Forest result) throws ParseFailed { // this massively improves GC performance - if (prev!=null) prev.hash = null; + if (prev!=null) { + prev.hash = null; + prev.singularReductions = null; + } this.next = next; closed = true; Forest res = null; @@ -251,7 +256,7 @@ class GSS { // Node ///////////////////////////////////////////////////////////////////////////////// /** a node in the GSS */ - public final class Node extends FastSet implements Invokable { + public final class Node extends FastSet implements Invokable, IntegerMappable { private Forest.Ref holder = null; private boolean allqueued = false; @@ -294,7 +299,12 @@ class GSS { holder[pos] = n.pending(); if (pos==0) { System.arraycopy(holder, 0, r.holder, 0, holder.length); - Forest rex = r.rewrite(n.phase().getLocation()); + Forest rex = null; + if (r.pos==1) rex = singularReductions.get(this, r); + if (rex==null) { + rex = r.rewrite(n.phase().getLocation()); + if (r.pos==1) singularReductions.put(this, r, rex); + } n2.finish(r, rex, n.phase(), holder); } else { n2.reduce(r, pos-1, n.phase(), holder); @@ -309,7 +319,12 @@ class GSS { if (pos==0) { System.arraycopy(holder, 0, r.holder, 0, holder.length); for(int i=0; i { // Position ////////////////////////////////////////////////////////////////////////////// /** the imaginary position before or after an element of a sequence; corresponds to an "LR item" */ - public class Position { + public class Position implements IntegerMappable { private Forest zero = null; public Forest zero() { @@ -151,8 +151,10 @@ public abstract class Sequence extends Element implements Iterable { ret.append("}>"); return ret.toString(); } + private final int idx = master_position_idx++; + public int toInt() { return idx; } } - + private static int master_position_idx = 0; // toString ////////////////////////////////////////////////////////////////////////////// diff --git a/tests/tibdoc.g b/tests/tibdoc.g index 81061e5..e1f8a86 100644 --- a/tests/tibdoc.g +++ b/tests/tibdoc.g @@ -51,7 +51,7 @@ Item ::= blockquote > structuredx Itemx => [] > styled Itemx => [] > qtext Itemx => [] - > alphanum++ Itemx => [] + > (alphanum++ => stringify) Itemx => [] > symbol Itemx => [] // > sym++ Itemx => [] > Paragraph Itemx => []