return thread_vms[threadid];
}
-void register_vm(unsigned long threadid, factorvm *vm)
+void register_vm(unsigned long threadid, factorvm *thevm)
{
- thread_vms[threadid] = vm;
+ thread_vms[threadid] = thevm;
}
int main(int argc, char **argv)
{
- factor::start_standalone_factor(argc,argv);
+ #ifdef FACTOR_MULTITHREADED
+ factor::THREADHANDLE thread = factor::start_standalone_factor_in_new_thread(argc,argv);
+ pthread_join(thread,NULL);
+ #else
+ factor::start_standalone_factor(argc,argv);
+ #endif
return 0;
}
return 1;
}
+ #ifdef FACTOR_MULTITHREADED
+ factor::THREADHANDLE thread = factor::start_standalone_factor_in_new_thread(nArgs,szArglist);
+ WaitForSingleObject(thread, INFINITE);
+ #else
factor::start_standalone_factor(nArgs,szArglist);
- //HANDLE thread = factor::start_standalone_factor_in_new_thread(nArgs,szArglist);
- //WaitForSingleObject(thread, INFINITE);
+ #endif
LocalFree(szArglist);
void sleep_micros(cell usec);
void open_console();
-
-#define SIGNAL_VM_PTR vm
}
THREADHANDLE start_thread(void *(*start_routine)(void *),void *args);
unsigned long thread_id();
-#define SIGNAL_VM_PTR lookup_vm(GetCurrentThreadId())
-
}
#if defined(FACTOR_X86)
extern "C" __attribute__ ((regparm (1))) typedef void (*primitive_type)(void *myvm);
#define PRIMITIVE(name) extern "C" __attribute__ ((regparm (1))) void primitive_##name(void *myvm)
- #define PRIMITIVE_GETVM() ((factorvm*)myvm)
#else
extern "C" typedef void (*primitive_type)(void *myvm);
#define PRIMITIVE(name) extern "C" void primitive_##name(void *myvm)
- #define PRIMITIVE_GETVM() vm
#endif
extern const primitive_type primitives[];
-#define PRIMITIVE_OVERFLOW_GETVM() vm
-#define VM_PTR vm
-#define ASSERTVM()
}
explicit tagged(cell tagged) : value_(tagged) {
#ifdef FACTOR_DEBUG
- untag_check(vm);
+ untag_check(SIGNAL_VM_PTR);
#endif
}
explicit tagged(TYPE *untagged) : value_(factor::tag(untagged)) {
#ifdef FACTOR_DEBUG
- untag_check(vm);
+ untag_check(SIGNAL_VM_PTR);
#endif
}
bool windows_stat(vm_char *path);
#if defined(WINNT)
- void c_to_factor_toplevel(cell quot);
void open_console();
// next method here:
#endif
+ #else // UNIX
+
+ stack_frame *uap_stack_pointer(void *uap);
#endif
};
-extern factorvm *vm;
extern factorvm *lookup_vm(unsigned long threadid);
extern void register_vm(unsigned long threadid,factorvm *vm);
+
+#define FACTOR_SINGLE_THREADED
+
+#ifdef FACTOR_SINGLE_THREADED
+ extern factorvm *vm;
+ #define PRIMITIVE_GETVM() vm
+ #define PRIMITIVE_OVERFLOW_GETVM() vm
+ #define VM_PTR vm
+ #define ASSERTVM()
+ #define SIGNAL_VM_PTR vm
+#endif
+
+#ifdef FACTOR_TESTING_MULTITHREADED
+ extern factorvm *vm;
+ #define PRIMITIVE_GETVM() ((factorvm*)myvm)
+ #define PRIMITIVE_OVERFLOW_GETVM() vm
+ #define VM_PTR myvm
+ #define ASSERTVM() assert(vm==myvm)
+ #define SIGNAL_VM_PTR lookup_vm(thread_id())
+#endif
+
+#ifdef FACTOR_MULTITHREADED
+ #define PRIMITIVE_GETVM() ((factorvm*)myvm)
+ #define PRIMITIVE_OVERFLOW_GETVM() ((factorvm*)myvm)
+ #define VM_PTR myvm
+ #define ASSERTVM()
+ #define SIGNAL_VM_PTR lookup_vm(thread_id())
+#endif
+
}