namespace factor
{

struct code_root {
	cell value;
	bool valid;
	factor_vm *parent;

	void push()
	{
		parent->code_roots.push_back(this);
	}

	explicit code_root(cell value_, factor_vm *parent_) :
		value(value_), valid(true), parent(parent_)
	{
		push();
	}

	~code_root()
	{
#ifdef FACTOR_DEBUG
		assert(parent->code_roots.back() == this);
#endif
		parent->code_roots.pop_back();
	}
};

}