David, excuse me, could you comment on the lines :
while (firstfree < obj) {
if (marked(obj)) {
car(firstfree) = car(obj);
cdr(firstfree) = cdr(obj);
unmark(obj);
movepointer(obj, firstfree);
According to my expectations, the expression
mark(firstfree)
should be built there. Else object can be lost.
i use code:
car(firstfree) = car(obj);
cdr(firstfree) = cdr(obj);
movepointer(obj, firstfree);
mark(firstfree); // There is mark the object which was moved
unmark(obj);
Before i was lost objects. Now all right.
But maybe I don’t understand everything in uLisp codes, and I’m wrong.
I confess, i am a sinner: i was write an extension for creating C-type arrays in uLisp. During debugging, i had some difficulties with compactimage() and saveimage().
Now it works. Image contains binary arrays following of all workspace.
But we can talk about this separately if there is interest.