Author: Whiteknight
Date: Mon Jul 21 19:10:07 2008
New Revision: 29666
Modified:
branches/gsoc_pdd09/src/gc/gc_it.c
Log:
[gsoc_pdd09] Improve flag logic to account for flag interdependencies
Modified: branches/gsoc_pdd09/src/gc/gc_it.c
==============================================================================
--- branches/gsoc_pdd09/src/gc/gc_it.c (original)
+++ branches/gsoc_pdd09/src/gc/gc_it.c Mon Jul 21 19:10:07 2008
@@ -239,12 +239,12 @@
{
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_trace = flags & (GC_trace_normal |
GC_trace_stack_FLAG);
+ const UINTVAL gc_lazy = flags & GC_lazy_FLAG;
const UINTVAL gc_volatile = flags & GC_no_trace_volatile_roots;
- const UINTVAL gc_finish = flags & GC_finish_FLAG;
-
+ const UINTVAL gc_stack = (gc_lazy || gc_volatile) ? (0)
+ : (flags & GC_trace_stack_FLAG);
+ const UINTVAL gc_finish = flags & GC_finish_FLAG;
if (gc_finish) {