static void trace_object(Heap_Verifier* heap_verifier, Partial_Reveal_Object* p_obj) { scan_object(heap_verifier, p_obj); GC_Verifier* gc_verifier = heap_verifier->gc_verifier; Vector_Block* trace_stack = (Vector_Block*)gc_verifier->trace_stack; while( !vector_stack_is_empty(trace_stack)){ p_obj = (Partial_Reveal_Object *)vector_stack_pop(trace_stack); scan_object(heap_verifier, p_obj); trace_stack = (Vector_Block*)gc_verifier->trace_stack; } return; }
static void trace_object(Conclctor* marker, Partial_Reveal_Object *p_obj) { scan_object(marker, p_obj); obj_mark_black_in_table(p_obj, marker); Vector_Block *trace_stack = marker->trace_stack; while(!vector_stack_is_empty(trace_stack)){ p_obj = (Partial_Reveal_Object*)vector_stack_pop(trace_stack); scan_object(marker, p_obj); obj_mark_black_in_table(p_obj, marker); trace_stack = marker->trace_stack; } }
static void trace_object(Collector* collector, Partial_Reveal_Object *p_obj) { scan_object(collector, p_obj); Vector_Block* trace_stack = collector->trace_stack; while( !vector_stack_is_empty(trace_stack)){ p_obj = (Partial_Reveal_Object *)vector_stack_pop(trace_stack); scan_object(collector, p_obj); trace_stack = collector->trace_stack; } return; }
static void trace_object(Collector *collector, REF *p_ref) { forward_object(collector, p_ref); Vector_Block* trace_stack = (Vector_Block*)collector->trace_stack; while( !vector_stack_is_empty(trace_stack)){ p_ref = (REF *)vector_stack_pop(trace_stack); #ifdef PREFETCH_SUPPORTED /* DO PREFETCH */ if(mark_prefetch) { if(!vector_stack_is_empty(trace_stack)) { REF *pref = (REF*)vector_stack_read(trace_stack, 0); PREFETCH( read_slot(pref) ); } } #endif forward_object(collector, p_ref); trace_stack = (Vector_Block*)collector->trace_stack; } return; }