void msgc_mark_objects_from_roots_and_remsets( msgc_context_t *context, int *marked, int *traced, int *words_marked ) { context->marked = 0; context->traced = 0; context->words_marked = 0; gc_enumerate_roots( context->gc, push_root, (void*)context ); mark_from_stack( context ); { int i; for( i = 1; i < context->gc->gno_count; i++ ) { pushing_entries_from_remset = i; urs_enumerate_gno( context->gc->the_remset, TRUE, i, push_remset_entry, context ); } } *marked += context->marked; *traced += context->traced; *words_marked += context->words_marked; }
void msgc_mark_objects_from_roots( msgc_context_t *context, int *marked, int *traced, int *words_marked ) { context->marked = 0; context->traced = 0; context->words_marked = 0; gc_enumerate_roots( context->gc, push_root, (void*)context ); mark_from_stack( context ); *marked += context->marked; *traced += context->traced; *words_marked += context->words_marked; }
void msgc_mark_objects_from_roots_and_a_remset( msgc_context_t *context, remset_t *remset, int *marked, int *traced, int *words_marked ) { context->marked = 0; context->traced = 0; context->words_marked = 0; gc_enumerate_roots( context->gc, push_root, (void*)context ); mark_from_stack( context ); pushing_entries_from_remset = 0; rs_enumerate( remset, push_remset_entry_stats, context ); *marked += context->marked; *traced += context->traced; *words_marked += context->words_marked; }
static bool push_remset_entry( word obj, void* data ) { PUSH( (msgc_context_t*)data, obj, pushing_entries_from_remset << 8, -1 ); mark_from_stack( (msgc_context_t*)data ); return TRUE; }
void msgc_mark_objects_from_nil( msgc_context_t *context ) { mark_from_stack( context ); }