namespace factor {

void init_mvm();
void register_vm_with_thread(factor_vm* vm);
factor_vm* current_vm_p();

inline factor_vm* current_vm() {
  factor_vm* vm = current_vm_p();
  FACTOR_ASSERT(vm != NULL);
  return vm;
}

VM_C_API THREADHANDLE start_standalone_factor_in_new_thread(int argc,
                                                            vm_char** argv);

extern std::map<THREADHANDLE, factor_vm*> thread_vms;

}