From: Andrea Corallo Date: Fri, 2 Oct 2020 12:42:43 +0000 (+0200) Subject: * When advising search in `comp-eln-load-path' the first writable dir X-Git-Tag: emacs-28.0.90~2727^2~404 X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=36e0c3fb07db9805e97fbd2650aa28ac2c169dba;p=emacs.git * 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. --- diff --git a/lisp/emacs-lisp/comp.el b/lisp/emacs-lisp/comp.el index 02b08119f9c..ef13c0ce63e 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)