From: Keith Packard Date: Wed, 13 Dec 2017 02:00:12 +0000 (-0800) Subject: altos/scheme: Use direct calls from frame to frame_vals mem functions X-Git-Tag: 1.8.4~1^2~28 X-Git-Url: https://git.gag.com/?a=commitdiff_plain;ds=sidebyside;h=c490efdf90befdf048ff7d9cbbe26bcc6f942820;hp=ca27d467198c556be483961a6ca3b8f97bbe96a6;p=fw%2Faltos altos/scheme: Use direct calls from frame to frame_vals mem functions Avoids the extra stack depth of the poly versions. Signed-off-by: Keith Packard --- diff --git a/src/scheme/ao_scheme_frame.c b/src/scheme/ao_scheme_frame.c index e5d481e7..7f521863 100644 --- a/src/scheme/ao_scheme_frame.c +++ b/src/scheme/ao_scheme_frame.c @@ -84,10 +84,13 @@ frame_mark(void *addr) struct ao_scheme_frame *frame = addr; for (;;) { + struct ao_scheme_frame_vals *vals = ao_scheme_poly_frame_vals(frame->vals); + MDBG_MOVE("frame mark %d\n", MDBG_OFFSET(frame)); if (!AO_SCHEME_IS_POOL(frame)) break; - ao_scheme_poly_mark(frame->vals, 0); + if (!ao_scheme_mark_memory(&ao_scheme_frame_vals_type, vals)) + frame_vals_mark(vals); frame = ao_scheme_poly_frame(frame->prev); MDBG_MOVE("frame next %d\n", MDBG_OFFSET(frame)); if (!frame) @@ -103,13 +106,20 @@ frame_move(void *addr) struct ao_scheme_frame *frame = addr; for (;;) { - struct ao_scheme_frame *prev; - int ret; + struct ao_scheme_frame *prev; + struct ao_scheme_frame_vals *vals; + int ret; MDBG_MOVE("frame move %d\n", MDBG_OFFSET(frame)); if (!AO_SCHEME_IS_POOL(frame)) break; - ao_scheme_poly_move(&frame->vals, 0); + + vals = ao_scheme_poly_frame_vals(frame->vals); + if (!ao_scheme_move_memory(&ao_scheme_frame_vals_type, (void **) &vals)) + frame_vals_move(vals); + if (vals != ao_scheme_poly_frame_vals(frame->vals)) + frame->vals = ao_scheme_frame_vals_poly(vals); + prev = ao_scheme_poly_frame(frame->prev); if (!prev) break;