>>>>> "L" == Louis Krupp <lkrupp / pssw.NOSPAMPLEASE.com.invalid> writes:

L> The second word (as I'm sure you know) is normally a count of how
L> many nodes are in the list.  I tried adding a flag bit and making
L> that word be either a counter or a tail pointer.  I don't remember
L> the details, but I couldn't get it to work in a reasonable amount
L> of time.  So I finally did the brute force thing and added a word.

 Not the second word, the second element. For example actually you have

    last = list;
    while (last->nd_next) {
	last = last->nd_next;
    }

 Try to replace it  with

    if (list->nd_next) {
	last = list->nd_next->nd_end;
    }
    else {
	last = list;
    }

 i.e. the first element give the size, the second give the end.

 You just need to adapt one macro in eval.c to make it work (if I'm right) 


Guy Decoux