diff --git a/mps/code/locv.c b/mps/code/locv.c index bcd3b0ba1f0..3d5a029b18b 100644 --- a/mps/code/locv.c +++ b/mps/code/locv.c @@ -22,6 +22,9 @@ static mps_addr_t isMoved(mps_addr_t object); static void copy(mps_addr_t old, mps_addr_t new); static void pad(mps_addr_t base, size_t size); +static void stepper(mps_addr_t addr, mps_fmt_t fmt, mps_pool_t pool, + void *p, size_t s); + static mps_fmt_A_s locv_fmt = { (mps_align_t)4, @@ -61,17 +64,26 @@ int main(void) die(mps_reserve(&p, ap, (size_t)4), "mps_reserve 4"); *(mps_word_t *)p = 4; cdie(mps_commit(ap, p, (size_t)4), "commit 4"); + die(mps_reserve(&roots[1], ap, (size_t)8), "mps_reserve 8"); p = roots[1]; *(mps_word_t *)p = 8; cdie(mps_commit(ap, p, (size_t)8), "commit 8"); + die(mps_reserve(&p, ap, (size_t)4096), "mps_reserve 4096"); *(mps_word_t *)p = 4096; cdie(mps_commit(ap, p, (size_t)4096), "commit 4096"); + die(mps_reserve(&p, ap, (size_t)4), "mps_reserve last"); *(mps_word_t *)p = 4; cdie(mps_commit(ap, p, (size_t)4), "commit last"); + { + size_t count = 0; + mps_arena_formatted_objects_walk(arena, stepper, &count, 0); + cdie(count == 4, "walk 4 objects"); + } + mps_ap_destroy(ap); mps_pool_destroy(pool); mps_fmt_destroy(format); @@ -135,6 +147,15 @@ static void pad(mps_addr_t base, size_t size) cdie(0, "pad"); } +static void stepper(mps_addr_t addr, mps_fmt_t fmt, mps_pool_t pool, + void *p, size_t s) +{ + size_t *pcount = p; + *pcount += 1; + return; +} + + /* C. COPYRIGHT AND LICENSE *