diff options
author | Kaz Kylheku <kaz@kylheku.com> | 2015-02-06 22:24:33 -0800 |
---|---|---|
committer | Kaz Kylheku <kaz@kylheku.com> | 2015-02-06 22:24:33 -0800 |
commit | 55cc849371a0dc0782f3f749cb58c46e0a558e40 (patch) | |
tree | f82e0ff125c582ef2753fef122e4761a9a4533e2 /match.c | |
parent | 3b7f7ef0422537391879d356e61baa50f74483a1 (diff) | |
download | txr-55cc849371a0dc0782f3f749cb58c46e0a558e40.tar.gz txr-55cc849371a0dc0782f3f749cb58c46e0a558e40.tar.bz2 txr-55cc849371a0dc0782f3f749cb58c46e0a558e40.zip |
Slight internal representation change of string-only exceptions.
One upshot of all this is that (throw 'foo "msg") now
does exactly the same thing as (throwf 'foo "msg").
A message-only exception really is a one-string exception argument
list ("message ..."), like the documentation says.
* unwind.h (struct uw_catch): exception member renamed to args.
(uw_catch): Macro follows structure member rename.
* eval.c (op_catch): Removed now unnecessary kludge of turning non-list
exception argument list into a one-element argument list.
* match.c (v_try): Similar hack to the one in op_catch
removed here.
* unwind.c (uw_unwind_to_exit_point, uw_push_catch): Follows rename of
exception member.
(uw_throw): The exception parameter is renamed to args. The kludge
removed from op_catch re-appears here, because numerous calls
to uw_throw just pass a string as args. It's less of a kludge here
because this is the master entry point to exception processing,
and it straightens out the representation right away.
The exception arguments or message are printed in a clearer way.
Diffstat (limited to 'match.c')
-rw-r--r-- | match.c | 5 |
1 files changed, 1 insertions, 4 deletions
@@ -3299,16 +3299,13 @@ static val v_try(match_files_ctx *c) val type = first(second(clause)); val params = second(second(clause)); val body = third(clause); - val vals = if3(listp(exvals), - exvals, - cons(exvals, nil)); if (first(clause) == catch_s) { if (uw_exception_subtype_p(exsym, type)) { val all_bind = t; val piter, viter; - for (piter = params, viter = vals; + for (piter = params, viter = exvals; piter && viter; piter = cdr(piter), viter = cdr(viter)) { |