static size_t
_mark (value obj, area *ptr, area *restore, area *fixups)
{
static size_t
_mark (value obj, area *ptr, area *restore, area *fixups)
{
// XXX This assertion might fail if someone tries to mark an object
// which is already ancient.
assert (Is_young (obj) || Is_in_heap (obj));
// XXX This assertion might fail if someone tries to mark an object
// which is already ancient.
assert (Is_young (obj) || Is_in_heap (obj));
// If we've already visited this object, just return its offset
// in the out-of-heap memory.
if (memcmp (header, &visited, sizeof visited) == 0)
return (Long_val (Field (obj, 0)));
// If we've already visited this object, just return its offset
// in the out-of-heap memory.
if (memcmp (header, &visited, sizeof visited) == 0)
return (Long_val (Field (obj, 0)));
ancient_attach (value fdv, value baseaddrv)
{
CAMLparam2 (fdv, baseaddrv);
ancient_attach (value fdv, value baseaddrv)
{
CAMLparam2 (fdv, baseaddrv);