On Monday 21 July 2008 18:38:55 [EMAIL PROTECTED] wrote:
> --- branches/gsoc_pdd09/src/gc/gc_it.c (original)
> +++ branches/gsoc_pdd09/src/gc/gc_it.c Mon Jul 21 18:38:55 2008
> @@ -239,6 +239,11 @@
> {
> const Arenas * const arena_base = interp->arena_base;
> Gc_it_data * const gc_priv_data = (Gc_it_data
> *)(arena_base->gc_private); + const UINTVAL gc_trace = flags &
> (GC_trace_normal | GC_trace_stack_FLAG); + const UINTVAL gc_stack =
> flags & GC_trace_stack_FLAG;
> + const UINTVAL gc_lazy = flags & GC_lazy_FLAG;
> + const UINTVAL gc_volatile = flags & GC_no_trace_volatile_roots;
> +
>
> if (flags & GC_finish_FLAG) {
>
> @@ -278,7 +283,12 @@
> case GC_IT_MARK_ROOTS:
> if (Parrot_is_blocked_GC_mark(interp))
> break;
> - Parrot_dod_trace_root(interp, 1);
> + if (gc_trace && gc_stack)
> + Parrot_dod_trace_root(interp, 1);
> + else if (gc_stack)
> + Parrot_dod_trace_root(interp, 2);
> + else if (gc_trace)
> + Parrot_dod_trace_root(interp, 0);
> gc_priv_data->state = GC_IT_RESUME_MARK;
> GC_IT_BREAK_AFTER_2;
That looks like a good opportunity for some more enumerations,
GC_TRACE_AND_STACK, GC_TRACE, GC_STACK. That'd shorten the conditional too.
-- c