Exemple #1
0
  object* fixup_data(object* obj) {
    if (aging->contains_p(obj) || tenured->contains_p(obj)) {
      return obj;
    }

    // Is there another forwarding pointer?
    while (obj->forwarding_pointer_p()) {
      object* dest = obj->forwarding_pointer();
      obj = dest;
    }

    if (aging->contains_p(obj) || tenured->contains_p(obj)) {
      return obj;
    }

    cell size = obj->size();
    object* newpointer = aging->allot(size);
    if (!newpointer)
      throw must_start_gc_again();

    memcpy(newpointer, obj, size);
    obj->forward_to(newpointer);

    return newpointer;
  }
 bool should_copy_p(object* untagged) {
     return !tenured->contains_p(untagged);
 }
Exemple #3
0
	void visited_object(object *obj)
	{
		if(!tenured->marked_p(obj))
			promoted_object(obj);
	}
Exemple #4
0
	void promoted_object(object *obj)
	{
		tenured->set_marked_p(obj);
		parent->mark_stack.push_back((cell)obj);
	}