altos/lisp: Make sure memmove only happens once per object. Other GC fixes
[fw/altos] / src / lisp / ao_lisp_frame.c
index 90344719afedc7881e5687cbc635a290f19acf7b..082860ee7176c4ee00be785a3fa0377ab4aa2535 100644 (file)
@@ -83,9 +83,9 @@ frame_move(void *addr)
                        ao_lisp_poly_move(&v->val, 0);
                }
                next = ao_lisp_poly_frame(frame->next);
-               ret = 1;
-               if (next)
-                       ret = ao_lisp_move_memory((void **) &next, frame_size(next));
+               if (!next)
+                       break;
+               ret = ao_lisp_move_memory((void **) &next, frame_size(next));
                if (next != ao_lisp_poly_frame(frame->next))
                        frame->next = ao_lisp_frame_poly(next);
                if (ret)