Пример #1
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);
}
Пример #2
0
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;
	}
}
Пример #3
0
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]);
}
Пример #4
0
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);
  }
}
Пример #5
0
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);
	}
}
Пример #6
0
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);
	}
}
Пример #7
0
void slot_visitor<Fixup>::visit_code_block_objects(code_block* compiled) {
  visit_handle(&compiled->owner);
  visit_handle(&compiled->parameters);
  visit_handle(&compiled->relocation);
}
Пример #8
0
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);
  }
}
Пример #9
0
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);
  }
}
Пример #10
0
void slot_visitor<Fixup>::visit_object_array(cell* start, cell* end) {
  while (start < end)
    visit_handle(start++);
}
Пример #11
0
void slot_visitor<Visitor>::visit_stack_elements(segment *region, cell *top)
{
	for(cell *ptr = (cell *)region->start; ptr <= top; ptr++)
		visit_handle(ptr);
}