summaryrefslogtreecommitdiffstats
path: root/eval.c
diff options
context:
space:
mode:
authorKaz Kylheku <kaz@kylheku.com>2017-01-25 10:29:27 -0800
committerKaz Kylheku <kaz@kylheku.com>2017-01-25 10:29:27 -0800
commit41ea4bd2c8791696525aadb0a457ba36fa1d204e (patch)
tree8d006ed8212c8911d5542cb75808a5c5e26dafd3 /eval.c
parent12454b0e43160c851e20614ce888d33c2f8d9b16 (diff)
downloadtxr-41ea4bd2c8791696525aadb0a457ba36fa1d204e.tar.gz
txr-41ea4bd2c8791696525aadb0a457ba36fa1d204e.tar.bz2
txr-41ea4bd2c8791696525aadb0a457ba36fa1d204e.zip
New catch*, giving access to exception symbol.
* eval.c (op_catch): The sys:catch operator now passes the exception symbol as the first argument of each clause. This means the catch macro must be adjusted. * share/txr/stdlib/except.tl (catch): Macro now inserts a gensym dummy first argument into each clause to take the symbol passed by the sys:catch operator. (catch*): New macro, which is identical to the previous catch macro, and thus exposes the symbol passed as the first argument. * txr.1: Documented catch*. * tests/012/struct.tl: Some gensym numbers need adjusting in one test case.
Diffstat (limited to 'eval.c')
-rw-r--r--eval.c5
1 files changed, 4 insertions, 1 deletions
diff --git a/eval.c b/eval.c
index b46cfb05..74521190 100644
--- a/eval.c
+++ b/eval.c
@@ -2285,10 +2285,13 @@ static val op_catch(val form, val env)
result = eval(try_form, env, try_form);
uw_catch(exsym, exvals) {
- args_decl_list(args, ARGS_MIN, exvals);
+ args_decl(args, ARGS_MIN);
val catches = rest(rest(rest(form)));
val iter;
+ args_add(args, exsym);
+ args_add_list(args, exvals);
+
for (iter = catches; iter; iter = cdr(iter)) {
val clause = car(iter);
val type = first(clause);