emacs-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

feature/native-comp 36e0c3f: * When advising search in `comp-eln-load-pa


From: Andrea Corallo
Subject: feature/native-comp 36e0c3f: * When advising search in `comp-eln-load-path' the first writable dir
Date: Fri, 2 Oct 2020 13:19:08 -0400 (EDT)

branch: feature/native-comp
commit 36e0c3fb07db9805e97fbd2650aa28ac2c169dba
Author: Andrea Corallo <akrl@sdf.org>
Commit: Andrea Corallo <akrl@sdf.org>

    * When advising search in `comp-eln-load-path' the first writable dir
    
        * lisp/emacs-lisp/comp.el (comp-tampoline-compile): Do not crash
        if we can't write in the first entry in `comp-eln-load-path' but
        search for another one.
---
 lisp/emacs-lisp/comp.el | 30 +++++++++++++++++++-----------
 1 file changed, 19 insertions(+), 11 deletions(-)

diff --git a/lisp/emacs-lisp/comp.el b/lisp/emacs-lisp/comp.el
index 02b0811..ef13c0c 100644
--- a/lisp/emacs-lisp/comp.el
+++ b/lisp/emacs-lisp/comp.el
@@ -2593,17 +2593,25 @@ Return the its filename if found or nil otherwise."
     ;; the primitive we are replacing in the function reloc table.
     (defalias trampoline-sym
       `(closure nil ,lambda-list
-         (let ((f #',subr-name))
-           (,(if (memq '&rest lambda-list) 'apply 'funcall)
-            f
-            ,@(cl-loop
-               for arg in lambda-list
-               unless (memq arg '(&optional &rest))
-                 collect arg)))))
-    (native-compile trampoline-sym nil
-                    (expand-file-name (comp-trampoline-filename subr-name)
-                                      (concat (car comp-eln-load-path)
-                                              comp-native-version-dir)))))
+                (let ((f #',subr-name))
+                  (,(if (memq '&rest lambda-list) 'apply 'funcall)
+                   f
+                   ,@(cl-loop
+                      for arg in lambda-list
+                      unless (memq arg '(&optional &rest))
+                      collect arg)))))
+    (native-compile
+     trampoline-sym nil
+     (cl-loop
+      for dir in comp-eln-load-path
+      for f = (expand-file-name
+               (comp-trampoline-filename subr-name)
+               (concat dir
+                       comp-native-version-dir))
+      when (file-writable-p f)
+        do (cl-return f)
+      finally (error "Can't find a writable directory in \
+`comp-eln-load-path'")))))
 
 ;;;###autoload
 (defun comp-subr-safe-advice (subr-name)



reply via email to

[Prev in Thread] Current Thread [Next in Thread]