unordered_map<long,factorvm*> thread_vms;
-factorvm *lookup_vm(long threadid)
+factorvm *lookup_vm(unsigned long threadid)
{
return thread_vms[threadid];
}
-void register_vm(long threadid, factorvm *vm)
+void register_vm(unsigned long threadid, factorvm *vm)
{
thread_vms[threadid] = vm;
}
return newvm->start_standalone_factor(argc,argv);
}
-VM_C_API void *start_standalone_factor_in_new_thread(int argc, vm_char **argv)
+VM_C_API THREADHANDLE start_standalone_factor_in_new_thread(int argc, vm_char **argv)
{
startargs *args = new startargs; // leaks startargs structure
args->argc = argc; args->argv = argv;
{
VM_C_API void start_standalone_factor(int argc, vm_char **argv);
-VM_C_API void *start_standalone_factor_in_new_thread(int argc, vm_char **argv);
+VM_C_API THREADHANDLE start_standalone_factor_in_new_thread(int argc, vm_char **argv);
}
namespace factor
{
-void *start_thread(void *(*start_routine)(void *),void *args)
+THREADHANDLE start_thread(void *(*start_routine)(void *),void *args)
{
pthread_attr_t attr;
pthread_t thread;
if (pthread_create (&thread, &attr, start_routine, args) != 0)
fatal_error("pthread_create() failed",0);
pthread_attr_destroy (&attr);
- return (void*)thread;
+ return thread;
}
+unsigned long thread_id(){
+ return pthread_self();
+}
+
+
static void *null_dll;
s64 current_micros()
}
-cell factorvm::thread_id(){
- return pthread_self();
-}
inline void factorvm::vmprim_existsp()
#define print_native_string(string) print_string(string)
-void *start_thread(void *(*start_routine)(void *),void *args);
+typedef pthread_t THREADHANDLE;
-void init_ffi();
-void ffi_dlopen(dll *dll);
-void *ffi_dlsym(dll *dll, symbol_char *symbol);
-void ffi_dlclose(dll *dll);
+THREADHANDLE start_thread(void *(*start_routine)(void *),void *args);
+unsigned long thread_id();
void unix_init_signals();
void signal_handler(int signal, siginfo_t* siginfo, void* uap);
namespace factor
{
-void *start_thread(void *(*start_routine)(void *),void *args){
- return CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)start_routine, args, 0, 0);
+THREADHANDLE start_thread(void *(*start_routine)(void *),void *args){
+ return (void*) CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)start_routine, args, 0, 0);
}
-cell factorvm::thread_id(){
+unsigned long thread_id(){
return GetCurrentThreadId();
}
-s64 factorvm::current_micros()
+s64 current_micros()
{
FILETIME t;
GetSystemTimeAsFileTime(&t);
#define STATUS_FLOAT_MULTIPLE_FAULTS 0xC00002B4
#define STATUS_FLOAT_MULTIPLE_TRAPS 0xC00002B5
-void *start_thread(void *(*start_routine)(void *),void *args);
+typedef HANDLE THREADHANDLE;
+
+THREADHANDLE start_thread(void *(*start_routine)(void *),void *args);
+unsigned long thread_id();
#define SIGNAL_VM_PTR lookup_vm(GetCurrentThreadId())
// os-*
inline void vmprim_existsp();
- cell thread_id();
void init_ffi();
void ffi_dlopen(dll *dll);
void *ffi_dlsym(dll *dll, symbol_char *symbol);
bool windows_stat(vm_char *path);
#if defined(WINNT)
- s64 current_micros();
void c_to_factor_toplevel(cell quot);
void open_console();
// next method here:
extern factorvm *vm;
-extern factorvm *lookup_vm(long threadid);
-extern void register_vm(long threadid,factorvm *vm);
+extern factorvm *lookup_vm(unsigned long threadid);
+extern void register_vm(unsigned long threadid,factorvm *vm);
}