* 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.
This commit is contained in:
Andrea Corallo 2020-10-02 14:42:43 +02:00
parent 8dacc9e8c5
commit 36e0c3fb07

View file

@ -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)