summaryrefslogtreecommitdiffstats
path: root/match.c
diff options
context:
space:
mode:
authorKaz Kylheku <kaz@kylheku.com>2011-12-20 17:42:56 -0800
committerKaz Kylheku <kaz@kylheku.com>2011-12-20 17:42:56 -0800
commit1c9044fb047cadde7e4efa2b110f6a6a80962d1a (patch)
tree48376683f5d2d94dd259ec778e9e771ba020fc47 /match.c
parentf16d4a0947c00f5256aad67ddca906948a25b4a4 (diff)
downloadtxr-1c9044fb047cadde7e4efa2b110f6a6a80962d1a.tar.gz
txr-1c9044fb047cadde7e4efa2b110f6a6a80962d1a.tar.bz2
txr-1c9044fb047cadde7e4efa2b110f6a6a80962d1a.zip
Streamlining exception handling macros a little bit.
* eval.c (op_unwind_protect): Use uw_simple_catch_begin, and remove the uw_catch (exsym, exvals) clause. Put explicit braces around the unwind code even though it is only one statement. * match.c (do_txeval): Got rid of empty uw_unwind clause. This is not needed any longer. (v_try): Got rid of explicit uw_do_unwind calls. * unwind.h (uw_simple_catch_begin): New macro. (uw_do_unwind): Macro removed. (uw_catch): Added goto uw_unwind_label at the front. This way if the previous clause falls through, control goes to the unwind logic. (uw_unwind): Got rid of initial break. Previous clause should fall through to unwind logic, whether it is the main clause, or one of the catches. (uw_catch_end): Default case aborts, because we don't expect this.
Diffstat (limited to 'match.c')
-rw-r--r--match.c4
1 files changed, 2 insertions, 2 deletions
diff --git a/match.c b/match.c
index 09d34dec..4e060df0 100644
--- a/match.c
+++ b/match.c
@@ -1366,6 +1366,8 @@ static val do_txeval(val spec, val form, val bindings, val allow_unbound)
sem_error(spec, lit("~a"), exc, nao);
}
+
+ uw_unwind { }
}
uw_catch_end;
@@ -2748,7 +2750,6 @@ static val v_try(match_files_ctx *c)
uw_catch_begin(catch_syms, exsym, exvals);
result = match_files(mf_spec(*c, try_clause));
- uw_do_unwind;
uw_catch(exsym, exvals) {
{
@@ -2807,7 +2808,6 @@ static val v_try(match_files_ctx *c)
}
}
}
- uw_do_unwind;
}
uw_unwind {