namespace factor {

struct safepoint_state {
  cell fep_p;
  profiling_sample_count sample_counts;

  safepoint_state() : fep_p(false), sample_counts() {}

  void handle_safepoint(factor_vm* parent, cell pc) volatile;

  void enqueue_safepoint(factor_vm* parent) volatile;
  void enqueue_samples(factor_vm* parent, cell samples, cell pc,
                       bool foreign_thread_p) volatile;
  void enqueue_fep(factor_vm* parent) volatile;
};

}
