aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAndrea Corallo2020-12-19 21:02:49 +0100
committerAndrea Corallo2020-12-19 21:28:00 +0100
commitab985f41db5fdaeada513d28a065332fd8838cf4 (patch)
tree31b852d5223ef6d0dbd4f4514f207c20b7d6417b
parent407fb165832341d3dccb78d2782d1790a19c4b9d (diff)
downloademacs-ab985f41db5fdaeada513d28a065332fd8838cf4.tar.gz
emacs-ab985f41db5fdaeada513d28a065332fd8838cf4.zip
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'.
-rw-r--r--src/comp.c4
-rw-r--r--src/eval.c29
-rw-r--r--src/lisp.h2
3 files changed, 33 insertions, 2 deletions
diff --git a/src/comp.c b/src/comp.c
index f77faaa483e..12c5f1c7e49 100644
--- a/src/comp.c
+++ b/src/comp.c
@@ -4618,11 +4618,11 @@ eln_load_path_final_clean_up (void)
4618 FOR_EACH_TAIL (dir_tail) 4618 FOR_EACH_TAIL (dir_tail)
4619 { 4619 {
4620 Lisp_Object files_in_dir = 4620 Lisp_Object files_in_dir =
4621 internal_condition_case_4 (Fdirectory_files, 4621 internal_condition_case_5 (Fdirectory_files,
4622 concat2 (XCAR (dir_tail), 4622 concat2 (XCAR (dir_tail),
4623 Vcomp_native_version_dir), 4623 Vcomp_native_version_dir),
4624 Qt, build_string ("\\.eln\\.old\\'"), Qnil, 4624 Qt, build_string ("\\.eln\\.old\\'"), Qnil,
4625 Qt, return_nil); 4625 Qt, return_nil, Qnil);
4626 FOR_EACH_TAIL (files_in_dir) 4626 FOR_EACH_TAIL (files_in_dir)
4627 Fdelete_file (XCAR (files_in_dir), Qnil); 4627 Fdelete_file (XCAR (files_in_dir), Qnil);
4628 } 4628 }
diff --git a/src/eval.c b/src/eval.c
index 2b31b91175b..368fa0944a1 100644
--- a/src/eval.c
+++ b/src/eval.c
@@ -1534,6 +1534,35 @@ internal_condition_case_4 (Lisp_Object (*bfun) (Lisp_Object, Lisp_Object,
1534 } 1534 }
1535} 1535}
1536 1536
1537/* Like internal_condition_case_1 but call BFUN with ARG1, ARG2, ARG3,
1538 ARG4, ARG5 as its arguments. */
1539
1540Lisp_Object
1541internal_condition_case_5 (Lisp_Object (*bfun) (Lisp_Object, Lisp_Object,
1542 Lisp_Object, Lisp_Object,
1543 Lisp_Object),
1544 Lisp_Object arg1, Lisp_Object arg2,
1545 Lisp_Object arg3, Lisp_Object arg4,
1546 Lisp_Object arg5, Lisp_Object handlers,
1547 Lisp_Object (*hfun) (Lisp_Object))
1548{
1549 struct handler *c = push_handler (handlers, CONDITION_CASE);
1550 if (sys_setjmp (c->jmp))
1551 {
1552 Lisp_Object val = handlerlist->val;
1553 clobbered_eassert (handlerlist == c);
1554 handlerlist = handlerlist->next;
1555 return hfun (val);
1556 }
1557 else
1558 {
1559 Lisp_Object val = bfun (arg1, arg2, arg3, arg4, arg5);
1560 eassert (handlerlist == c);
1561 handlerlist = c->next;
1562 return val;
1563 }
1564}
1565
1537/* Like internal_condition_case but call BFUN with NARGS as first, 1566/* Like internal_condition_case but call BFUN with NARGS as first,
1538 and ARGS as second argument. */ 1567 and ARGS as second argument. */
1539 1568
diff --git a/src/lisp.h b/src/lisp.h
index 588316e01b8..923e742eec6 100644
--- a/src/lisp.h
+++ b/src/lisp.h
@@ -4157,6 +4157,8 @@ extern Lisp_Object internal_condition_case (Lisp_Object (*) (void), Lisp_Object,
4157extern Lisp_Object internal_condition_case_1 (Lisp_Object (*) (Lisp_Object), Lisp_Object, Lisp_Object, Lisp_Object (*) (Lisp_Object)); 4157extern Lisp_Object internal_condition_case_1 (Lisp_Object (*) (Lisp_Object), Lisp_Object, Lisp_Object, Lisp_Object (*) (Lisp_Object));
4158extern Lisp_Object internal_condition_case_2 (Lisp_Object (*) (Lisp_Object, Lisp_Object), Lisp_Object, Lisp_Object, Lisp_Object, Lisp_Object (*) (Lisp_Object)); 4158extern Lisp_Object internal_condition_case_2 (Lisp_Object (*) (Lisp_Object, Lisp_Object), Lisp_Object, Lisp_Object, Lisp_Object, Lisp_Object (*) (Lisp_Object));
4159extern 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)); 4159extern 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));
4160extern 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));
4161extern 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));
4160extern Lisp_Object internal_condition_case_n 4162extern Lisp_Object internal_condition_case_n
4161 (Lisp_Object (*) (ptrdiff_t, Lisp_Object *), ptrdiff_t, Lisp_Object *, 4163 (Lisp_Object (*) (ptrdiff_t, Lisp_Object *), ptrdiff_t, Lisp_Object *,
4162 Lisp_Object, Lisp_Object (*) (Lisp_Object, ptrdiff_t, Lisp_Object *)); 4164 Lisp_Object, Lisp_Object (*) (Lisp_Object, ptrdiff_t, Lisp_Object *));