nitg: Added signal information when producing a stack trace.
[nit.git] / src / abstract_compiler.nit
index b02369f..f54857e 100644 (file)
@@ -440,6 +440,11 @@ abstract class AbstractCompiler
                        end
                end
 
+               v.add_decl("void sig_handler(int signo)\{")
+               v.add_decl("printf(\"Caught signal : %s\\n\", strsignal(signo));")
+               v.add_decl("show_backtrace(signo);")
+               v.add_decl("\}")
+
                v.add_decl("void show_backtrace (int signo) \{")
                if not modelbuilder.toolcontext.opt_no_stacktrace.value then
                        v.add_decl("char* opt = getenv(\"NIT_NO_STACK\");")
@@ -475,12 +480,12 @@ abstract class AbstractCompiler
 
                v.add_decl("int main(int argc, char** argv) \{")
 
-               v.add("signal(SIGABRT, show_backtrace);")
-               v.add("signal(SIGFPE, show_backtrace);")
-               v.add("signal(SIGILL, show_backtrace);")
-               v.add("signal(SIGINT, show_backtrace);")
-               v.add("signal(SIGTERM, show_backtrace);")
-               v.add("signal(SIGSEGV, show_backtrace);")
+               v.add("signal(SIGABRT, sig_handler);")
+               v.add("signal(SIGFPE, sig_handler);")
+               v.add("signal(SIGILL, sig_handler);")
+               v.add("signal(SIGINT, sig_handler);")
+               v.add("signal(SIGTERM, sig_handler);")
+               v.add("signal(SIGSEGV, sig_handler);")
 
                v.add("glob_argc = argc; glob_argv = argv;")
                v.add("initialize_gc_option();")
@@ -2402,13 +2407,13 @@ redef class ASuperExpr
                        args = v.frame.arguments
                end
 
-               var mproperty = self.mproperty
-               if mproperty != null then
-                       if mproperty.intro.msignature.arity == 0 then
+               var callsite = self.callsite
+               if callsite != null then
+                       if callsite.mproperty.intro.msignature.arity == 0 then
                                args = [recv]
                        end
                        # Super init call
-                       var res = v.send(mproperty, args)
+                       var res = v.compile_callsite(callsite, args)
                        return res
                end