From: Richard M. Stallman Date: Mon, 7 Feb 1994 01:02:05 +0000 (+0000) Subject: (internal_condition_case_1): New function. X-Git-Tag: emacs-19.34~10044 X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=d227775c812fc1b75e56829bae372ca48833d00e;p=emacs.git (internal_condition_case_1): New function. --- 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,