mirror of
git://git.sv.gnu.org/emacs.git
synced 2026-01-07 12:20:39 -08:00
(internal_condition_case_1): New function.
This commit is contained in:
parent
f1ff664544
commit
d227775c81
1 changed files with 37 additions and 0 deletions
37
src/eval.c
37
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,
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue