示例#1
0
/*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;
    }
}
示例#2
0
文件: mark_rts.c 项目: pcpa/bdwgc
/* 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;
    }
}