From 36e0c3fb07db9805e97fbd2650aa28ac2c169dba Mon Sep 17 00:00:00 2001 From: Andrea Corallo Date: Fri, 2 Oct 2020 14:42:43 +0200 Subject: [PATCH] * 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 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) -- 2.39.5