Mercurial > emacs
diff src/eval.c @ 30217:887b4d52a334
(internal_condition_case_2): New function.
| author | Gerd Moellmann <gerd@gnu.org> |
|---|---|
| date | Fri, 14 Jul 2000 13:57:10 +0000 |
| parents | bb87a284ee53 |
| children | 5a0f2d368f58 |
line wrap: on
line diff
--- a/src/eval.c Fri Jul 14 13:56:56 2000 +0000 +++ b/src/eval.c Fri Jul 14 13:57:10 2000 +0000 @@ -1274,6 +1274,50 @@ handlerlist = h.next; return val; } + + +/* Like internal_condition_case but call HFUN with NARGS as first, + and ARGS as second argument. */ + +Lisp_Object +internal_condition_case_2 (bfun, nargs, args, handlers, hfun) + Lisp_Object (*bfun) (); + int nargs; + Lisp_Object *args; + 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; + c.byte_stack = byte_stack_list; + if (_setjmp (c.jmp)) + { + return (*hfun) (c.val); + } + c.next = catchlist; + catchlist = &c; + h.handler = handlers; + h.var = Qnil; + h.next = handlerlist; + h.tag = &c; + handlerlist = &h; + + val = (*bfun) (nargs, args); + catchlist = c.next; + handlerlist = h.next; + return val; +} + static Lisp_Object find_handler_clause ();
