// 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 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());
- }
- for(GSS.Phase.Node child : parent.parents())
- reduce(child, pos-1, rex, target);
- } else if (pos>0) {
- for(GSS.Phase.Node child : parent.parents())
- reduce(child, pos-1, rex, target);
- } else {
- return finish(parent, rex, target);
+ if (pos<0) return finish(parent, rex, target);
+ holder[pos] = parent.pending();
+ if (pos==0 && rex==null) {
+ System.arraycopy(holder, 0, position.holder, 0, holder.length);
+ rex = position.rewrite(target.getLocation());
}
+ for(GSS.Phase.Node child : parent.parents())
+ reduce(child, pos-1, rex, target);
return rex;
}
private Forest finish(GSS.Phase.Node parent, Forest result, GSS.Phase target) {