#include "master.hpp"
-namespace factor
-{
+namespace factor {
-factor_vm::factor_vm() :
- nursery(0,0),
- callback_id(0),
- c_to_factor_func(NULL),
- profiling_p(false),
- gc_off(false),
- current_gc(NULL),
- gc_events(NULL),
- fep_disabled(false),
- full_output(false),
- last_nano_count(0),
- signal_callstack_seg(NULL)
-{
- primitive_reset_dispatch_stats();
+factor_vm::factor_vm(THREADHANDLE thread)
+ : ctx(NULL),
+ nursery(0, 0),
+ faulting_p(false),
+ thread(thread),
+#if defined(WINDOWS)
+ thread_id(GetCurrentThreadId()),
+ ctrl_break_thread(NULL),
+#endif
+ callback_id(0),
+ c_to_factor_func(NULL),
+ sampling_profiler_p(false),
+ signal_pipe_input(0),
+ signal_pipe_output(0),
+ current_sample(0, 0, 0, 0, 0),
+ gc_off(false),
+ data(NULL), code(NULL), callbacks(NULL),
+ current_gc(NULL),
+ current_gc_p(false),
+ current_jit_count(0),
+ gc_events(NULL),
+ fep_p(false),
+ fep_help_was_shown(false),
+ fep_disabled(false),
+ full_output(false),
+ object_counter(0),
+ last_nano_count(0),
+ signal_callstack_seg(NULL),
+ safepoint_fep_p(false),
+ stop_on_ctrl_break(false) {
+ primitive_reset_dispatch_stats();
}
-factor_vm::~factor_vm()
-{
- delete_contexts();
- if(signal_callstack_seg)
- {
- delete signal_callstack_seg;
- signal_callstack_seg = NULL;
- }
- std::list<void **>::const_iterator iter = function_descriptors.begin();
- std::list<void **>::const_iterator end = function_descriptors.end();
- while(iter != end)
- {
- delete [] *iter;
- iter++;
- }
+factor_vm::~factor_vm() {
+ free(alien_offset(special_objects[OBJ_EXECUTABLE]));
+ free(alien_offset(special_objects[OBJ_IMAGE]));
+ close_console();
+ FACTOR_ASSERT(!ctx);
+ FACTOR_FOR_EACH(unused_contexts) {
+ delete *iter;
+ }
+ FACTOR_FOR_EACH(active_contexts) {
+ delete *iter;
+ }
+ if (callbacks)
+ delete callbacks;
+ if (data)
+ delete data;
+ if (code)
+ delete code;
+ if (signal_callstack_seg) {
+ delete signal_callstack_seg;
+ signal_callstack_seg = NULL;
+ }
+ FACTOR_FOR_EACH(function_descriptors) {
+ delete[] * iter;
+ }
}
}