]> gitweb.factorcode.org Git - factor.git/blobdiff - vm/vm.cpp
audio.engine.test: cleanup using
[factor.git] / vm / vm.cpp
old mode 100755 (executable)
new mode 100644 (file)
index 16005a9..bf40379
--- a/vm/vm.cpp
+++ b/vm/vm.cpp
@@ -1,49 +1,64 @@
 #include "master.hpp"
 
-namespace factor
-{
+namespace factor {
 
-factor_vm::factor_vm(THREADHANDLE thread) :
-       nursery(0,0),
-        thread(thread),
-       callback_id(0),
-       c_to_factor_func(NULL),
-       counting_profiler_p(false),
-       sampling_profiler_p(false),
-       signal_pipe_input(0),
-       signal_pipe_output(0),
-       gc_off(false),
-       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),
-       last_nano_count(0),
-       signal_callstack_seg(NULL),
-       faulting_p(false),
-       safepoint(this)
-{
-       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;
+  }
 }
 
 }