]> gitweb.factorcode.org Git - factor.git/blob - vm/vm.cpp
VM: merging the profiling_sample and profiling_sample_count classes
[factor.git] / vm / vm.cpp
1 #include "master.hpp"
2
3 namespace factor {
4
5 factor_vm::factor_vm(THREADHANDLE thread)
6     : ctx(NULL),
7       nursery(0, 0),
8       faulting_p(false),
9       thread(thread),
10 #if defined(WINDOWS)
11       thread_id(GetCurrentThreadId()),
12       ctrl_break_thread(NULL),
13 #endif
14       callback_id(0),
15       c_to_factor_func(NULL),
16       sampling_profiler_p(false),
17       signal_pipe_input(0),
18       signal_pipe_output(0),
19       current_sample(0, 0, 0, 0, 0),
20       gc_off(false),
21       data(NULL), code(NULL), callbacks(NULL),
22       current_gc(NULL),
23       current_gc_p(false),
24       current_jit_count(0),
25       gc_events(NULL),
26       fep_p(false),
27       fep_help_was_shown(false),
28       fep_disabled(false),
29       full_output(false),
30       last_nano_count(0),
31       signal_callstack_seg(NULL),
32       safepoint_fep_p(false),
33       stop_on_ctrl_break(false) {
34   primitive_reset_dispatch_stats();
35 }
36
37 factor_vm::~factor_vm() {
38   free(alien_offset(special_objects[OBJ_EXECUTABLE]));
39   free(alien_offset(special_objects[OBJ_IMAGE]));
40   close_console();
41   FACTOR_ASSERT(!ctx);
42   FACTOR_FOR_EACH(unused_contexts) {
43     delete *iter;
44   }
45   FACTOR_FOR_EACH(active_contexts) {
46     delete *iter;
47   }
48   if (callbacks)
49     delete callbacks;
50   if (data)
51     delete data;
52   if (code)
53     delete code;
54   if (signal_callstack_seg) {
55     delete signal_callstack_seg;
56     signal_callstack_seg = NULL;
57   }
58   FACTOR_FOR_EACH(function_descriptors) {
59     delete[] * iter;
60   }
61 }
62
63 }