int num = hv.size();
for(int i=0; i<num; i++) {
Node n = reducing_list[i];
+ n.queueEmptyReductions();
+ // INVARIANT: we never "see" a node until its parent-set is complete, modulo merges
+ }
+ for(int i=0; i<num; i++) {
+ Node n = reducing_list[i];
reducing_list[i] = null;
n.queueEmptyReductions();
n.queueReductions();
if (allqueued) return;
allqueued = true;
int where = parents().size();
- for(int i=0; i<where; i++) queueReductions(get(i));
+ for(Parser.Table.Reduction r : token==null ? state.getEofReductions() : state.getReductions(token))
+ if (r.numPop >= 1)
+ r.reduce(this, null, null);
}
/** FIXME */
- public void queueReductions(Node n2) {
+ public void queueReductions(Node n2) { queueReductions(n2, true); }
+ public void queueReductions(Node n2, boolean includeLongs) {
if (!allqueued) { queueReductions(); return; }
Node n = this;
for(Parser.Table.Reduction r : token==null ? n.state.getEofReductions() : n.state.getReductions(token)) {