emacs-diffs
[Top][All Lists]
Advanced

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

emacs-29 bcc222251e1: Fix `emacs-lisp-native-compile-and-load' for C-h f


From: Andrea Corallo
Subject: emacs-29 bcc222251e1: Fix `emacs-lisp-native-compile-and-load' for C-h f (bug#58314)
Date: Tue, 6 Jun 2023 06:22:11 -0400 (EDT)

branch: emacs-29
commit bcc222251e1a750a11e365f2faa641cc56c1169d
Author: Andrea Corallo <akrl@sdf.org>
Commit: Andrea Corallo <akrl@sdf.org>

    Fix `emacs-lisp-native-compile-and-load' for C-h f (bug#58314)
    
    * lisp/emacs-lisp/comp.el (comp-write-bytecode-file): New function
    spilling code from `batch-byte+native-compile'.
    (batch-byte+native-compile): Make use of.
    * lisp/progmodes/elisp-mode.el
    (emacs-lisp-native-compile-and-load): Produce the elc file and ask
    to have it loaded.
---
 lisp/emacs-lisp/comp.el      | 31 +++++++++++++++++++++----------
 lisp/progmodes/elisp-mode.el |  8 ++++++--
 2 files changed, 27 insertions(+), 12 deletions(-)

diff --git a/lisp/emacs-lisp/comp.el b/lisp/emacs-lisp/comp.el
index 8f40f2f40a0..469f921a38e 100644
--- a/lisp/emacs-lisp/comp.el
+++ b/lisp/emacs-lisp/comp.el
@@ -4318,6 +4318,26 @@ last directory in `native-comp-eln-load-path')."
              else
              collect (byte-compile-file file))))
 
+(defun comp-write-bytecode-file (eln-file)
+  "After native compilation write the bytecode file for ELN-FILE.
+Make sure that eln file is younger than byte-compiled one and
+return the filename of this last.
+
+This function can be used only in conjuntion with
+`byte+native-compile' `byte-to-native-output-buffer-file' (see
+`batch-byte+native-compile')."
+  (pcase byte-to-native-output-buffer-file
+    (`(,temp-buffer . ,target-file)
+     (unwind-protect
+         (progn
+           (byte-write-target-file temp-buffer target-file)
+           ;; Touch the .eln in order to have it older than the
+           ;; corresponding .elc.
+           (when (stringp eln-file)
+             (set-file-times eln-file)))
+       (kill-buffer temp-buffer))
+     target-file)))
+
 ;;;###autoload
 (defun batch-byte+native-compile ()
   "Like `batch-native-compile', but used for bootstrap.
@@ -4333,16 +4353,7 @@ variable \"NATIVE_DISABLED\" is set, only byte compile."
     (let* ((byte+native-compile t)
            (byte-to-native-output-buffer-file nil)
            (eln-file (car (batch-native-compile))))
-      (pcase byte-to-native-output-buffer-file
-        (`(,temp-buffer . ,target-file)
-         (unwind-protect
-             (progn
-               (byte-write-target-file temp-buffer target-file)
-               ;; Touch the .eln in order to have it older than the
-               ;; corresponding .elc.
-               (when (stringp eln-file)
-                 (set-file-times eln-file)))
-           (kill-buffer temp-buffer))))
+      (comp-write-bytecode-file eln-file)
       (setq command-line-args-left (cdr command-line-args-left)))))
 
 ;;;###autoload
diff --git a/lisp/progmodes/elisp-mode.el b/lisp/progmodes/elisp-mode.el
index 6fbb87fa3a8..956e3d30bce 100644
--- a/lisp/progmodes/elisp-mode.el
+++ b/lisp/progmodes/elisp-mode.el
@@ -215,6 +215,8 @@ All commands in `lisp-mode-shared-map' are inherited by 
this map."
   (load (byte-compile-dest-file buffer-file-name)))
 
 (declare-function native-compile "comp")
+(declare-function comp-write-bytecode-file "comp")
+
 (defun emacs-lisp-native-compile-and-load ()
   "Native-compile synchronously the current file (if it has changed).
 Load the compiled code when finished.
@@ -224,8 +226,10 @@ Use `emacs-lisp-byte-compile-and-load' in combination with
 native compilation."
   (interactive nil emacs-lisp-mode)
   (emacs-lisp--before-compile-buffer)
-  (when-let ((out (native-compile buffer-file-name)))
-    (load out)))
+  (let ((byte+native-compile t)
+        (byte-to-native-output-buffer-file nil))
+    (when-let ((eln (native-compile buffer-file-name)))
+      (load (file-name-sans-extension (comp-write-bytecode-file eln))))))
 
 (defun emacs-lisp-macroexpand ()
   "Macroexpand the form after point.



reply via email to

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