Exemple #1
0
template <typename Fixup> void slot_visitor<Fixup>::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++)
    visit_object_array(iter->start, iter->start + iter->len);
}
Exemple #2
0
void slot_visitor<Fixup>::visit_slots(object* ptr, cell payload_start) {
  cell* slot = (cell*)ptr;
  cell* end = (cell*)((cell)ptr + payload_start);

  if (slot != end) {
    slot++;
    visit_object_array(slot, end);
  }
}
Exemple #3
0
template <typename Fixup> void slot_visitor<Fixup>::visit_contexts() {
  std::set<context*>::const_iterator begin = parent->active_contexts.begin();
  std::set<context*>::const_iterator end = parent->active_contexts.end();
  while (begin != end) {
    context* ctx = *begin;

    visit_stack_elements(ctx->datastack_seg, (cell*)ctx->datastack);
    visit_stack_elements(ctx->retainstack_seg, (cell*)ctx->retainstack);
    visit_object_array(ctx->context_objects,
                       ctx->context_objects + context_object_count);
    visit_callstack(ctx);
    begin++;
  }
}
Exemple #4
0
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);
}
Exemple #5
0
void slot_visitor<Fixup>::visit_stack_elements(segment* region, cell* top) {
  visit_object_array((cell*)region->start, top + 1);
}