diff options
author | Steve Bennett <steveb@workware.net.au> | 2010-03-03 15:50:50 +1000 |
---|---|---|
committer | Steve Bennett <steveb@workware.net.au> | 2010-10-15 11:02:48 +1000 |
commit | 6a9fcd338b28fe76cb980867632068dd2bec533c (patch) | |
tree | 7e4046bd5d6ae0fa018dcfc51208c010b00ef472 /jim-exec.c | |
parent | ec3d0d6cfddfa055d00c820a2ed99a7d6858aa82 (diff) | |
download | jimtcl-6a9fcd338b28fe76cb980867632068dd2bec533c.zip jimtcl-6a9fcd338b28fe76cb980867632068dd2bec533c.tar.gz jimtcl-6a9fcd338b28fe76cb980867632068dd2bec533c.tar.bz2 |
Improvements to catch, return, signal, try
Improve the ability to rethrow errors
* Allow return to rethrow an error by accepting '-errorinfo stacktrace'
* Also, 'catch ... opts' now also stores opts(-errorinfo) on error
* Use these to provide better stack traces from 'case' and 'try'
* Implement 'return -level'
Make try/on/finally more Tcl 8.6 compatible
* With support for 'on' handlers and docs
Add support for catch options to try
* Otherwise it's hard to use try to catch signals
Improvements to signal handling
* catch -signal now sets a list of the handled signals as the result
* catch -signal won't execute the body at all if a handled signal is pending
* up to 64 (jim_wide) signals can now be handled
* if catch -signal is nested, the innermost catch will catch the error
* new 'signal catch' allows ignored/blocked signals to be examined and cleared.
* update docs on signal handling
exec should indicate which signal killed the child
Signed-off-by: Steve Bennett <steveb@workware.net.au>
Diffstat (limited to 'jim-exec.c')
-rw-r--r-- | jim-exec.c | 7 |
1 files changed, 6 insertions, 1 deletions
@@ -24,6 +24,7 @@ #include "jim.h" #include "jim-subcmd.h" +#include "jim-signal.h" /* These two could be moved into the Tcl core */ static void Jim_SetResultErrno(Jim_Interp *interp, const char *msg) @@ -947,7 +948,11 @@ Jim_CleanupChildren(Jim_Interp *interp, int numPids, int *pidPtr, int errorId) /* Nothing */ } else if (WIFSIGNALED(waitStatus)) { /* REVISIT: Name the signal */ - Jim_SetResultString(interp, "child killed by signal", -1); +#ifdef jim_ext_signal + Jim_SetResultFormatted(interp, "child killed by signal %s", Jim_SignalId(WTERMSIG(waitStatus))); +#else + Jim_SetResultFormatted(interp, "child killed by signal %d", WTERMSIG(waitStatus)); +#endif } else if (WIFSTOPPED(waitStatus)) { Jim_SetResultString(interp, "child suspended", -1); } |