~ chicken-core (chicken-5) 4568ac2a66a8a813f16d20483ee05460c8462dbb


commit 4568ac2a66a8a813f16d20483ee05460c8462dbb
Author:     Jörg F. Wittenberger <Joerg.Wittenberger@softeyes.net>
AuthorDate: Sat Jun 13 10:38:28 2015 +0200
Commit:     Mario Domenech Goulart <mario.goulart@gmail.com>
CommitDate: Sat Jun 13 16:24:14 2015 -0300

    Add cases for unhandled error codes to `barf`.
    
    Signed-off-by: Peter Bex <peter@more-magic.net>
    Signed-off-by: Mario Domenech Goulart <mario.goulart@gmail.com>

diff --git a/NEWS b/NEWS
index 1ec580bd..a3393ba7 100644
--- a/NEWS
+++ b/NEWS
@@ -45,6 +45,8 @@
   - Removed several deprecated and undocumented internal procedures:
     ##sys#zap-strings, ##sys#round, ##sys#foreign-number-vector-argument,
     ##sys#check-port-mode, ##sys#check-port*
+  - SIGBUS, SIGILL and SIGFPE will now cause proper exceptions instead
+    of panicking (thanks to Joerg Wittenberger).
 
 - Module system
   - Allow functor arguments to be optional, with default implementations.
diff --git a/runtime.c b/runtime.c
index 8267954d..75ca6549 100644
--- a/runtime.c
+++ b/runtime.c
@@ -1753,6 +1753,21 @@ void barf(int code, char *loc, ...)
     c = 0;
     break;
 
+  case C_FLOATING_POINT_EXCEPTION_ERROR:
+    msg = C_text("floating point exception");
+    c = 0;
+    break;
+
+  case C_ILLEGAL_INSTRUCTION_ERROR:
+    msg = C_text("illegal instruction");
+    c = 0;
+    break;
+
+  case C_BUS_ERROR:
+    msg = C_text("bus error");
+    c = 0;
+    break;
+
   default: panic(C_text("illegal internal error code"));
   }
   
Trap