]> git.eshelyaron.com Git - emacs.git/commitdiff
(internal_condition_case_1): New function.
authorRichard M. Stallman <rms@gnu.org>
Mon, 7 Feb 1994 01:02:05 +0000 (01:02 +0000)
committerRichard M. Stallman <rms@gnu.org>
Mon, 7 Feb 1994 01:02:05 +0000 (01:02 +0000)
src/eval.c

index d2ca5418e20764af2a12dd64b9f6ee3fb48c35c5..9e5a33d9775593ed51343a5480d98917769f0e21 100644 (file)
@@ -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;
+}
+\f
 static Lisp_Object find_handler_clause ();
 
 DEFUN ("signal", Fsignal, Ssignal, 2, 2, 0,