2010-01-30 23:39:43 -05:00
|
|
|
#include "master.hpp"
|
|
|
|
|
2013-05-11 22:31:48 -04:00
|
|
|
namespace factor {
|
2010-01-30 23:39:43 -05:00
|
|
|
|
2013-05-11 22:31:48 -04:00
|
|
|
factor_vm::factor_vm(THREADHANDLE thread)
|
2016-05-12 21:22:31 -04:00
|
|
|
: ctx(NULL),
|
|
|
|
nursery(0, 0),
|
2013-05-11 22:31:48 -04:00
|
|
|
faulting_p(false),
|
|
|
|
thread(thread),
|
2016-06-15 09:19:52 -04:00
|
|
|
#if defined(WINDOWS)
|
|
|
|
thread_id(GetCurrentThreadId()),
|
|
|
|
ctrl_break_thread(NULL),
|
|
|
|
#endif
|
2013-05-11 22:31:48 -04:00
|
|
|
callback_id(0),
|
|
|
|
c_to_factor_func(NULL),
|
|
|
|
sampling_profiler_p(false),
|
|
|
|
signal_pipe_input(0),
|
|
|
|
signal_pipe_output(0),
|
2017-06-24 19:15:40 -04:00
|
|
|
current_sample(0, 0, 0, 0, 0),
|
2013-05-11 22:31:48 -04:00
|
|
|
gc_off(false),
|
2016-05-13 19:30:36 -04:00
|
|
|
data(NULL), code(NULL), callbacks(NULL),
|
2013-05-11 22:31:48 -04:00
|
|
|
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),
|
2018-01-26 11:17:29 -05:00
|
|
|
object_counter(0),
|
2013-05-11 22:31:48 -04:00
|
|
|
last_nano_count(0),
|
|
|
|
signal_callstack_seg(NULL),
|
2016-11-01 22:21:47 -04:00
|
|
|
safepoint_fep_p(false),
|
|
|
|
stop_on_ctrl_break(false) {
|
2013-05-11 22:31:48 -04:00
|
|
|
primitive_reset_dispatch_stats();
|
2010-01-30 23:39:43 -05:00
|
|
|
}
|
|
|
|
|
2013-05-11 22:31:48 -04:00
|
|
|
factor_vm::~factor_vm() {
|
2016-05-13 19:30:36 -04:00
|
|
|
free(alien_offset(special_objects[OBJ_EXECUTABLE]));
|
|
|
|
free(alien_offset(special_objects[OBJ_IMAGE]));
|
|
|
|
close_console();
|
2016-05-12 21:22:13 -04:00
|
|
|
FACTOR_ASSERT(!ctx);
|
|
|
|
FACTOR_FOR_EACH(unused_contexts) {
|
|
|
|
delete *iter;
|
|
|
|
}
|
2016-05-13 17:07:32 -04:00
|
|
|
FACTOR_FOR_EACH(active_contexts) {
|
|
|
|
delete *iter;
|
|
|
|
}
|
|
|
|
if (callbacks)
|
|
|
|
delete callbacks;
|
|
|
|
if (data)
|
|
|
|
delete data;
|
2016-05-13 19:30:36 -04:00
|
|
|
if (code)
|
|
|
|
delete code;
|
2013-05-11 22:31:48 -04:00
|
|
|
if (signal_callstack_seg) {
|
|
|
|
delete signal_callstack_seg;
|
|
|
|
signal_callstack_seg = NULL;
|
|
|
|
}
|
2015-05-29 06:25:12 -04:00
|
|
|
FACTOR_FOR_EACH(function_descriptors) {
|
2013-05-11 22:31:48 -04:00
|
|
|
delete[] * iter;
|
|
|
|
}
|
2010-03-26 22:44:43 -04:00
|
|
|
}
|
|
|
|
|
2010-01-30 23:39:43 -05:00
|
|
|
}
|