diff options
author | Kaz Kylheku <kaz@kylheku.com> | 2015-10-14 06:49:33 -0700 |
---|---|---|
committer | Kaz Kylheku <kaz@kylheku.com> | 2015-10-14 06:49:33 -0700 |
commit | 9cef0547ba0ec81ce6051bb1cba9db5671e08e64 (patch) | |
tree | c7f9cf081f07026c01d8aba741c78e67d3b376eb /rand.h | |
parent | d34d09ef504ba2728821ce5b806bb59f22f378d7 (diff) | |
download | txr-9cef0547ba0ec81ce6051bb1cba9db5671e08e64.tar.gz txr-9cef0547ba0ec81ce6051bb1cba9db5671e08e64.tar.bz2 txr-9cef0547ba0ec81ce6051bb1cba9db5671e08e64.zip |
New way of handling exceptions without unwinding.
* eval.c (handler_bind_s): New symbol variable.
(op_handler_bind): New static function.
(do_expand): Traverse handler-bind forms.
(eval_init): Initialize handler_bind_s variable and register handler-bind
operator.
* lisplib.c (except_set_entries, except_instantiate): New functions.
(lisplib_init): Register new functions in dl_table.
* parser.c (intr_s): New symbol variable.
(repl_intr): Throw exception of type intr, rather than error.
This way we can interrupt accidental exception handling loops involving
exceptions derived from error.
(parse_init): Initialize intr_s.
* share/txr/stdlib/except.tl: New file, defines handle macro.
* unwind.c (uw_push_handler): New function.
(invoke_handler): New static function.
(uw_throw): Search loop looks for and processes handlers in addition to
catches.
* unwind.h (uw_frtype_t): New enum member, UW_HANDLE.
(struct uw_catch): Move member visible so it
is in the same position as in struct uw_handler.
(struct uw_handler): New struct type.
(union uw_frame): New member ha of type struct uw_handler.
(uw_push_handler): Function declared.
* txr.1: Added introductory paragraphs to Exception Handling section.
Documented handler-bind and handle. Some minor errors corrected.
Diffstat (limited to 'rand.h')
0 files changed, 0 insertions, 0 deletions