+ void reduce2(Pos r, int pos, GSS.Phase target, Node pred, Forest f) {
+ Forest[] holder = r.holder;
+ Forest old = pos >= holder.length ? null : holder[pos];
+ if (pos < holder.length) holder[pos] = f;
+ if (pos>0) pred.reduce(r, pos-1, target, null);
+ else {
+ Input.Region region = pred.phase().getLocation().createRegion(target.getLocation());
+ new Reduction(pred, r, r.rewrite(region), target);
+ }
+ if (pos < holder.length) holder[pos] = old;
+ }
+
+ Node(GSS.Phase phase, Forest f, Pos reduction, Node pred, State state, boolean fromEmptyReduction) {
+ this(phase, new Result(f, reduction, pred), state, fromEmptyReduction);
+ }
+ Node(GSS.Phase phase, Result pred, State state, boolean fromEmptyReduction) {