]> git.eshelyaron.com Git - emacs.git/commitdiff
Prevent unnecessary multiple .el hashing in 'maybe_swap_for_eln'
authorAndrea Corallo <akrl@sdf.org>
Sun, 21 Mar 2021 19:40:45 +0000 (20:40 +0100)
committerAndrea Corallo <akrl@sdf.org>
Sun, 21 Mar 2021 19:45:03 +0000 (20:45 +0100)
* src/comp.c (Fcomp_el_to_eln_rel_filename): New function.
(Fcomp_el_to_eln_filename): Make use of.
(syms_of_comp): Register 'Scomp_el_to_eln_rel_filename'.
* src/lread.c (maybe_swap_for_eln): Make use of
'Fcomp_el_to_eln_rel_filename' to hash prevent unnecessary
multiple hashing.

src/comp.c
src/lread.c

index 29b16c78ac06d97ef8a81b0dd0b7ae2f7beebb1a..4e2b941b67015b52174c2ea73d83ac5fd8381a8e 100644 (file)
@@ -4001,11 +4001,10 @@ make_directory_wrapper_1 (Lisp_Object ignore)
   return Qt;
 }
 
-DEFUN ("comp-el-to-eln-filename", Fcomp_el_to_eln_filename,
-       Scomp_el_to_eln_filename, 1, 2, 0,
-       doc: /* Return the corresponding .eln filename for source FILENAME.
-If BASE-DIR is nil use the first entry in `comp-eln-load-path'.  */)
-  (Lisp_Object filename, Lisp_Object base_dir)
+DEFUN ("comp-el-to-eln-rel-filename", Fcomp_el_to_eln_rel_filename,
+       Scomp_el_to_eln_rel_filename, 1, 1, 0,
+       doc: /* Return the corresponding .eln relative filename.  */)
+  (Lisp_Object filename)
 {
   CHECK_STRING (filename);
 
@@ -4082,7 +4081,16 @@ If BASE-DIR is nil use the first entry in `comp-eln-load-path'.  */)
                                                           make_fixnum (-3))),
                      separator);
   Lisp_Object hash = concat3 (path_hash, separator, content_hash);
-  filename = concat3 (filename, hash, build_string (NATIVE_ELISP_SUFFIX));
+  return concat3 (filename, hash, build_string (NATIVE_ELISP_SUFFIX));
+}
+
+DEFUN ("comp-el-to-eln-filename", Fcomp_el_to_eln_filename,
+       Scomp_el_to_eln_filename, 1, 2, 0,
+       doc: /* Return the corresponding .eln filename for source FILENAME.
+If BASE-DIR is nil use the first entry in `comp-eln-load-path'.  */)
+  (Lisp_Object filename, Lisp_Object base_dir)
+{
+  filename = Fcomp_el_to_eln_rel_filename (filename);
 
   /* If base_dir was not specified search inside Vcomp_eln_load_path
      for the first directory where we have write access.  */
@@ -5287,6 +5295,7 @@ compiled one.  */);
                             "configuration, please recompile"));
 
   defsubr (&Scomp__subr_signature);
+  defsubr (&Scomp_el_to_eln_rel_filename);
   defsubr (&Scomp_el_to_eln_filename);
   defsubr (&Scomp_native_driver_options_effective_p);
   defsubr (&Scomp__install_trampoline);
index 3bf31500065f2e43d64de66fd30d45dc994fa995..5fd52feb3760e5529838890939934df5704a2aee 100644 (file)
@@ -1661,19 +1661,21 @@ maybe_swap_for_eln (bool no_native, Lisp_Object *filename, int *fd)
 
   /* Search eln in the eln-cache directories.  */
   Lisp_Object eln_path_tail = Vcomp_eln_load_path;
-  FOR_EACH_TAIL_SAFE (eln_path_tail)
+  Lisp_Object src_name =
+    Fsubstring (*filename, Qnil, make_fixnum (-1));
+  if (NILP (Ffile_exists_p (src_name)))
     {
-      Lisp_Object src_name =
-       Fsubstring (*filename, Qnil, make_fixnum (-1));
+      src_name = concat2 (src_name, build_string (".gz"));
       if (NILP (Ffile_exists_p (src_name)))
-       {
-         src_name = concat2 (src_name, build_string (".gz"));
-         if (NILP (Ffile_exists_p (src_name)))
-           /* Can't find the corresponding source file.  */
-           return;
-       }
+       /* Can't find the corresponding source file.  */
+       return;
+    }
+  Lisp_Object eln_rel_name = Fcomp_el_to_eln_rel_filename (src_name);
+
+  FOR_EACH_TAIL_SAFE (eln_path_tail)
+    {
       Lisp_Object eln_name =
-       Fcomp_el_to_eln_filename (src_name, XCAR (eln_path_tail));
+       Fexpand_file_name (eln_rel_name, XCAR (eln_path_tail));
       int eln_fd = emacs_open (SSDATA (ENCODE_FILE (eln_name)), O_RDONLY, 0);
 
       if (eln_fd > 0)