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

Reply via email to