namespace factor {

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

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

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

  ~code_root() {
    FACTOR_ASSERT(parent->code_roots.back() == this);
    parent->code_roots.pop_back();
  }
};

}