]> gitweb.factorcode.org Git - factor.git/commitdiff
moved signal handlers into vm object
authorPhil Dawes <phil@phildawes.net>
Fri, 4 Sep 2009 18:23:20 +0000 (19:23 +0100)
committerPhil Dawes <phil@phildawes.net>
Wed, 16 Sep 2009 07:22:16 +0000 (08:22 +0100)
vm/os-unix.cpp
vm/vm.hpp

index 7913647f3e3dcd1df81e35464e04fad82b78c080..3f4e1b29f7dbaf21184c4a6b4dbf3c9d8819714f 100644 (file)
@@ -147,20 +147,31 @@ stack_frame *factorvm::uap_stack_pointer(void *uap)
                return NULL;
 }
 
+
+
+void factorvm::memory_signal_handler(int signal, siginfo_t *siginfo, void *uap)
+{
+       signal_fault_addr = (cell)siginfo->si_addr;
+       signal_callstack_top = uap_stack_pointer(uap);
+       UAP_PROGRAM_COUNTER(uap) = (cell)factor::memory_signal_handler_impl;
+}
+
 void memory_signal_handler(int signal, siginfo_t *siginfo, void *uap)
 {
-       factorvm *myvm = SIGNAL_VM_PTR();
-       myvm->signal_fault_addr = (cell)siginfo->si_addr;
-       myvm->signal_callstack_top = myvm->uap_stack_pointer(uap);
-       UAP_PROGRAM_COUNTER(uap) = (cell)memory_signal_handler_impl;
+       SIGNAL_VM_PTR()->memory_signal_handler(signal,siginfo,uap);
+}
+
+
+void factorvm::misc_signal_handler(int signal, siginfo_t *siginfo, void *uap)
+{
+       signal_number = signal;
+       signal_callstack_top = uap_stack_pointer(uap);
+       UAP_PROGRAM_COUNTER(uap) = (cell)factor::misc_signal_handler_impl;
 }
 
 void misc_signal_handler(int signal, siginfo_t *siginfo, void *uap)
 {
-       factorvm *myvm = SIGNAL_VM_PTR();
-       myvm->signal_number = signal;
-       myvm->signal_callstack_top = myvm->uap_stack_pointer(uap);
-       UAP_PROGRAM_COUNTER(uap) = (cell)misc_signal_handler_impl;
+       SIGNAL_VM_PTR()->misc_signal_handler(signal,siginfo,uap);
 }
 
 void fpe_signal_handler(int signal, siginfo_t *siginfo, void *uap)
index baa67deae8a2bf28146cc68ac6d6fe9040c76814..efb0fa48e947706ee43c09e1e687c7e5a3335506 100644 (file)
--- a/vm/vm.hpp
+++ b/vm/vm.hpp
@@ -355,9 +355,9 @@ struct factorvm : factorvmdata {
        float to_float(cell value);
        void box_double(double flo);
        double to_double(cell value);
-       void overflow_fixnum_add(fixnum x, fixnum y);
-       void overflow_fixnum_subtract(fixnum x, fixnum y);
-       void overflow_fixnum_multiply(fixnum x, fixnum y);
+       inline void overflow_fixnum_add(fixnum x, fixnum y);
+       inline void overflow_fixnum_subtract(fixnum x, fixnum y);
+       inline void overflow_fixnum_multiply(fixnum x, fixnum y);
        inline cell allot_integer(fixnum x);
        inline cell allot_cell(cell x);
        inline cell allot_float(double n);
@@ -600,7 +600,8 @@ struct factorvm : factorvmdata {
        // next method here:    
    #endif
   #else  // UNIX
-
+       void memory_signal_handler(int signal, siginfo_t *siginfo, void *uap);
+       void misc_signal_handler(int signal, siginfo_t *siginfo, void *uap);
        stack_frame *uap_stack_pointer(void *uap);
 
   #endif