Add 'internal_condition_case_5' (bug#45303).

* src/lisp.h (internal_condition_case_4)
	(internal_condition_case_5): Declare.
	* src/eval.c (internal_condition_case_5): New function.
	* src/comp.c (eln_load_path_final_clean_up): Use
	'internal_condition_case_5'.
This commit is contained in:
Andrea Corallo 2020-12-19 21:02:49 +01:00
parent 407fb16583
commit ab985f41db
3 changed files with 33 additions and 2 deletions

View file

@ -4618,11 +4618,11 @@ eln_load_path_final_clean_up (void)
FOR_EACH_TAIL (dir_tail)
{
Lisp_Object files_in_dir =
internal_condition_case_4 (Fdirectory_files,
internal_condition_case_5 (Fdirectory_files,
concat2 (XCAR (dir_tail),
Vcomp_native_version_dir),
Qt, build_string ("\\.eln\\.old\\'"), Qnil,
Qt, return_nil);
Qt, return_nil, Qnil);
FOR_EACH_TAIL (files_in_dir)
Fdelete_file (XCAR (files_in_dir), Qnil);
}

View file

@ -1534,6 +1534,35 @@ internal_condition_case_4 (Lisp_Object (*bfun) (Lisp_Object, Lisp_Object,
}
}
/* Like internal_condition_case_1 but call BFUN with ARG1, ARG2, ARG3,
ARG4, ARG5 as its arguments. */
Lisp_Object
internal_condition_case_5 (Lisp_Object (*bfun) (Lisp_Object, Lisp_Object,
Lisp_Object, Lisp_Object,
Lisp_Object),
Lisp_Object arg1, Lisp_Object arg2,
Lisp_Object arg3, Lisp_Object arg4,
Lisp_Object arg5, Lisp_Object handlers,
Lisp_Object (*hfun) (Lisp_Object))
{
struct handler *c = push_handler (handlers, CONDITION_CASE);
if (sys_setjmp (c->jmp))
{
Lisp_Object val = handlerlist->val;
clobbered_eassert (handlerlist == c);
handlerlist = handlerlist->next;
return hfun (val);
}
else
{
Lisp_Object val = bfun (arg1, arg2, arg3, arg4, arg5);
eassert (handlerlist == c);
handlerlist = c->next;
return val;
}
}
/* Like internal_condition_case but call BFUN with NARGS as first,
and ARGS as second argument. */

View file

@ -4157,6 +4157,8 @@ extern Lisp_Object internal_condition_case (Lisp_Object (*) (void), Lisp_Object,
extern Lisp_Object internal_condition_case_1 (Lisp_Object (*) (Lisp_Object), Lisp_Object, Lisp_Object, Lisp_Object (*) (Lisp_Object));
extern Lisp_Object internal_condition_case_2 (Lisp_Object (*) (Lisp_Object, Lisp_Object), Lisp_Object, Lisp_Object, Lisp_Object, Lisp_Object (*) (Lisp_Object));
extern Lisp_Object internal_condition_case_3 (Lisp_Object (*) (Lisp_Object, Lisp_Object, Lisp_Object), Lisp_Object, Lisp_Object, Lisp_Object, Lisp_Object, Lisp_Object (*) (Lisp_Object));
extern Lisp_Object internal_condition_case_4 (Lisp_Object (*) (Lisp_Object, Lisp_Object, Lisp_Object, Lisp_Object), Lisp_Object, Lisp_Object, Lisp_Object, Lisp_Object, Lisp_Object, Lisp_Object (*) (Lisp_Object));
extern Lisp_Object internal_condition_case_5 (Lisp_Object (*) (Lisp_Object, Lisp_Object, Lisp_Object, Lisp_Object, Lisp_Object), Lisp_Object, Lisp_Object, Lisp_Object, Lisp_Object, Lisp_Object, Lisp_Object, Lisp_Object (*) (Lisp_Object));
extern Lisp_Object internal_condition_case_n
(Lisp_Object (*) (ptrdiff_t, Lisp_Object *), ptrdiff_t, Lisp_Object *,
Lisp_Object, Lisp_Object (*) (Lisp_Object, ptrdiff_t, Lisp_Object *));