summaryrefslogtreecommitdiff
path: root/src/eval.c
diff options
context:
space:
mode:
authorRichard M. Stallman <rms@gnu.org>1994-02-07 01:02:05 +0000
committerRichard M. Stallman <rms@gnu.org>1994-02-07 01:02:05 +0000
commit8d88a966d6640e44a32e445596a9c2fe0cd3f2a8 (patch)
tree88eaefa69ce118a62ca3ba94ed9910bf23f8c127 /src/eval.c
parente9954a7f57115c4d34d09dd555e263cd5cff654d (diff)
downloademacs-8d88a966d6640e44a32e445596a9c2fe0cd3f2a8.tar.gz
(internal_condition_case_1): New function.
Diffstat (limited to 'src/eval.c')
-rw-r--r--src/eval.c37
1 files changed, 37 insertions, 0 deletions
diff --git a/src/eval.c b/src/eval.c
index d2ca5418e20..9e5a33d9775 100644
--- a/src/eval.c
+++ b/src/eval.c
@@ -1094,6 +1094,43 @@ internal_condition_case (bfun, handlers, hfun)
return val;
}
+Lisp_Object
+internal_condition_case_1 (bfun, arg, handlers, hfun)
+ Lisp_Object (*bfun) ();
+ Lisp_Object arg;
+ Lisp_Object handlers;
+ Lisp_Object (*hfun) ();
+{
+ Lisp_Object val;
+ struct catchtag c;
+ struct handler h;
+
+ c.tag = Qnil;
+ c.val = Qnil;
+ c.backlist = backtrace_list;
+ c.handlerlist = handlerlist;
+ c.lisp_eval_depth = lisp_eval_depth;
+ c.pdlcount = specpdl_ptr - specpdl;
+ c.poll_suppress_count = poll_suppress_count;
+ c.gcpro = gcprolist;
+ if (_setjmp (c.jmp))
+ {
+ return (*hfun) (Fcdr (c.val));
+ }
+ c.next = catchlist;
+ catchlist = &c;
+ h.handler = handlers;
+ h.var = Qnil;
+ h.next = handlerlist;
+ h.tag = &c;
+ handlerlist = &h;
+
+ val = (*bfun) (arg);
+ catchlist = c.next;
+ handlerlist = h.next;
+ return val;
+}
+
static Lisp_Object find_handler_clause ();
DEFUN ("signal", Fsignal, Ssignal, 2, 2, 0,