(internal_condition_case_2): New function.
This commit is contained in:
parent
0d8b31c0ff
commit
10b29d414e
1 changed files with 44 additions and 0 deletions
44
src/eval.c
44
src/eval.c
|
@ -1274,6 +1274,50 @@ internal_condition_case_1 (bfun, arg, handlers, hfun)
|
|||
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 ();
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue