]> git.eshelyaron.com Git - emacs.git/commitdiff
Add 'internal_condition_case_5' (bug#45303).
authorAndrea Corallo <akrl@sdf.org>
Sat, 19 Dec 2020 20:02:49 +0000 (21:02 +0100)
committerAndrea Corallo <akrl@sdf.org>
Sat, 19 Dec 2020 20:28:00 +0000 (21:28 +0100)
* 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'.

src/comp.c
src/eval.c
src/lisp.h

index f77faaa483eae9b52de8ec5b8eb438c551bf0408..12c5f1c7e49bf50bddfc89528e0aa9f5bcd0b5c9 100644 (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);
     }
index 2b31b91175b195d4501ab46903f50d9ebfc8ca7c..368fa0944a14620b1ce0e9f82a8aa554f9d60741 100644 (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.  */
 
index 588316e01b88f8fce267d3aeac33448086d3bcde..923e742eec6bb212445fa632f1108bb36a86da01 100644 (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 *));