/*ARGSUSED*/ STATIC void GC_push_conditional_with_exclusions(ptr_t bottom, ptr_t top, GC_bool all) { struct exclusion * next; ptr_t excl_start; while (bottom < top) { next = GC_next_exclusion(bottom); if (0 == next || (excl_start = next -> e_start) >= top) { GC_push_conditional(bottom, top, all); return; } if (excl_start > bottom) GC_push_conditional(bottom, excl_start, all); bottom = next -> e_end; } }
/* Invoke push_conditional on ranges that are not excluded. */ STATIC void GC_push_conditional_with_exclusions(ptr_t bottom, ptr_t top, GC_bool all GC_ATTR_UNUSED) { struct exclusion * next; ptr_t excl_start; while ((word)bottom < (word)top) { next = GC_next_exclusion(bottom); if (0 == next || (word)(excl_start = next -> e_start) >= (word)top) { GC_push_conditional(bottom, top, all); return; } if ((word)excl_start > (word)bottom) GC_push_conditional(bottom, excl_start, all); bottom = next -> e_end; } }