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