]> gitweb.factorcode.org Git - factor.git/blob - vm/vm.cpp
Support Link Time Optimization (off by default)
[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       callback_id(0),
11       c_to_factor_func(NULL),
12       sampling_profiler_p(false),
13       signal_pipe_input(0),
14       signal_pipe_output(0),
15       current_sample(0, 0, 0, 0, 0),
16       gc_off(false),
17       data(NULL), code(NULL), callbacks(NULL),
18       current_gc(NULL),
19       current_gc_p(false),
20       current_jit_count(0),
21       gc_events(NULL),
22       fep_p(false),
23       fep_help_was_shown(false),
24       fep_disabled(false),
25       full_output(false),
26       object_counter(0),
27       last_nano_count(0),
28       signal_callstack_seg(NULL),
29       safepoint_fep_p(false),
30       stop_on_ctrl_break(false)
31 #if defined(WINDOWS)
32       ,
33       thread_id(GetCurrentThreadId()),
34       ctrl_break_thread(NULL),
35       sampler_thread(NULL)
36 #endif
37 {
38   primitive_reset_dispatch_stats();
39 }
40
41 factor_vm::~factor_vm() {
42   free(alien_offset(special_objects[OBJ_EXECUTABLE]));
43   free(alien_offset(special_objects[OBJ_IMAGE]));
44   close_console();
45   FACTOR_ASSERT(!ctx);
46   FACTOR_FOR_EACH(unused_contexts) {
47     delete *iter;
48   }
49   FACTOR_FOR_EACH(active_contexts) {
50     delete *iter;
51   }
52   if (callbacks)
53     delete callbacks;
54   if (data)
55     delete data;
56   if (code)
57     delete code;
58   if (signal_callstack_seg) {
59     delete signal_callstack_seg;
60     signal_callstack_seg = NULL;
61   }
62   FACTOR_FOR_EACH(function_descriptors) {
63     delete[] * iter;
64   }
65 }
66
67 }