summaryrefslogtreecommitdiffstats
path: root/eval.c
diff options
context:
space:
mode:
Diffstat (limited to 'eval.c')
-rw-r--r--eval.c19
1 files changed, 9 insertions, 10 deletions
diff --git a/eval.c b/eval.c
index c2a82994..6d1d425f 100644
--- a/eval.c
+++ b/eval.c
@@ -2558,22 +2558,21 @@ static val rcomb_while_fun(val state)
static void rcomb_gen_fun_common(val state)
{
val iter;
- val rev = nil;
+ val next;
- for (iter = state; consp(iter); iter = cdr(iter)) {
+ for (iter = state, next = cdr(state);
+ consp(iter);
+ iter = next, next = cdr(iter))
+ {
val curr = first(iter);
val curr_rest = rest(curr);
- push(iter, &rev);
-
if (consp(curr_rest)) {
- val iter2;
- for (iter2 = rev; iter2; iter2 = cdr(iter2)) {
- val revit = car(iter2);
- *car_l(revit) = curr_rest;
- }
+ val jter;
+ for (jter = state; jter != next; jter = cdr(jter))
+ *car_l(jter) = curr_rest;
return;
- } else if (rest(iter)) {
+ } else if (next) {
val next = second(iter);
if (curr != next)
*car_l(iter) = rest(next);