Beispiel #1
0
// Allocates memory
void factor_vm::primitive_clone() {

  data_root<object> obj(ctx->peek(), this);

  if (immediate_p(obj.value()))
    return;
  cell size = object_size(obj.value());
  object* new_obj = allot_object(obj.type(), size);
  memcpy(new_obj, obj.untagged(), size);
  new_obj->set_hashcode(0);
  ctx->replace(tag_dynamic(new_obj));
}
Beispiel #2
0
cell factor_vm::clone_object(cell obj_)
{
	data_root<object> obj(obj_,this);

	if(immediate_p(obj.value()))
		return obj.value();
	else
	{
		cell size = object_size(obj.value());
		object *new_obj = allot_object(obj.type(),size);
		memcpy(new_obj,obj.untagged(),size);
		new_obj->set_hashcode(0);
		return tag_dynamic(new_obj);
	}
}
Beispiel #3
0
	void operator()(object *obj)
	{
		if(type == TYPE_COUNT || obj->type() == type)
			objects.push_back(tag_dynamic(obj));
	}