void slot_visitor<Fixup>::visit_roots() { visit_handle(&parent->true_object); visit_handle(&parent->bignum_zero); visit_handle(&parent->bignum_pos_one); visit_handle(&parent->bignum_neg_one); visit_data_roots(); visit_bignum_roots(); visit_callback_roots(); visit_literal_table_roots(); visit_object_array(parent->special_objects,parent->special_objects + special_object_count); }
void slot_visitor<Visitor>::visit_contexts() { context *ctx = parent->ctx; while(ctx) { visit_stack_elements(ctx->datastack_region,(cell *)ctx->datastack); visit_stack_elements(ctx->retainstack_region,(cell *)ctx->retainstack); visit_handle(&ctx->catchstack_save); visit_handle(&ctx->current_callback_save); ctx = ctx->next; } }
void slot_visitor<Visitor>::visit_roots() { visit_handle(&parent->true_object); visit_handle(&parent->bignum_zero); visit_handle(&parent->bignum_pos_one); visit_handle(&parent->bignum_neg_one); visit_data_roots(); visit_bignum_roots(); visit_callback_roots(); visit_literal_table_roots(); for(cell i = 0; i < special_object_count; i++) visit_handle(&parent->special_objects[i]); }
template <typename Fixup> void slot_visitor<Fixup>::visit_data_roots() { std::vector<cell*>::const_iterator iter = parent->data_roots.begin(); std::vector<cell*>::const_iterator end = parent->data_roots.end(); for (; iter < end; iter++) { visit_handle(*iter); } }
void slot_visitor<Visitor>::visit_slots(object *ptr, cell payload_start) { cell *slot = (cell *)ptr; cell *end = (cell *)((cell)ptr + payload_start); if(slot != end) { slot++; for(; slot < end; slot++) visit_handle(slot); } }
void slot_visitor<Visitor>::visit_data_roots() { std::vector<data_root_range>::const_iterator iter = parent->data_roots.begin(); std::vector<data_root_range>::const_iterator end = parent->data_roots.end(); for(; iter < end; iter++) { data_root_range r = *iter; for(cell index = 0; index < r.len; index++) visit_handle(r.start + index); } }
void slot_visitor<Fixup>::visit_code_block_objects(code_block* compiled) { visit_handle(&compiled->owner); visit_handle(&compiled->parameters); visit_handle(&compiled->relocation); }
template <typename Fixup> void slot_visitor<Fixup>::visit_sample_threads() { for (std::vector<profiling_sample>::iterator iter = parent->samples.begin(); iter != parent->samples.end(); ++iter) { visit_handle(&iter->thread); } }
template <typename Fixup> void slot_visitor<Fixup>::visit_sample_callstacks() { for (std::vector<cell>::iterator iter = parent->sample_callstacks.begin(); iter != parent->sample_callstacks.end(); ++iter) { visit_handle(&*iter); } }
void slot_visitor<Fixup>::visit_object_array(cell* start, cell* end) { while (start < end) visit_handle(start++); }
void slot_visitor<Visitor>::visit_stack_elements(segment *region, cell *top) { for(cell *ptr = (cell *)region->start; ptr <= top; ptr++) visit_handle(ptr); }