]> git.eshelyaron.com Git - emacs.git/commitdiff
Suspend temp .elc production when native compiling till when necessary
authorAndrea Corallo <akrl@sdf.org>
Wed, 19 Jan 2022 20:07:00 +0000 (21:07 +0100)
committerAndrea Corallo <akrl@sdf.org>
Wed, 19 Jan 2022 21:04:14 +0000 (22:04 +0100)
* lisp/emacs-lisp/bytecomp.el (byte-to-native-output-buffer-file):
Rename from `byte-to-native-output-file'.
(byte-write-target-file): Update.
(byte-compile-file): Write the temporary .elc only when not native
compiling.
(byte-compile-file): Kill the .elc buffer only when not native
compiling.
* lisp/emacs-lisp/comp.el (batch-byte+native-compile): Instead of just
renaming the temporary .elc make use of `byte-write-target-file' to
write it down and kill the temporary buffer.

lisp/emacs-lisp/bytecomp.el
lisp/emacs-lisp/comp.el

index 49d4ca6510a7fe879bcf7c7ee65f6ac178a3cd5f..7dfe21441bd5c1133d379d533b9aa63604daeaec 100644 (file)
@@ -615,8 +615,8 @@ Each element is (INDEX . VALUE)")
   "Hash byte-code -> byte-to-native-lambda.")
 (defvar byte-to-native-top-level-forms nil
   "List of top level forms.")
-(defvar byte-to-native-output-file nil
-  "Temporary file containing the byte-compilation output.")
+(defvar byte-to-native-output-buffer-file nil
+  "Pair holding byte-compilation output buffer, elc filename.")
 (defvar byte-to-native-plist-environment nil
   "To spill `overriding-plist-environment'.")
 
@@ -2008,7 +2008,7 @@ If compilation is needed, this functions returns the result of
       ;; deleting target-file before writing it.
       (if byte-native-compiling
           ;; Defer elc final renaming.
-          (setf byte-to-native-output-file
+          (setf byte-to-native-output-buffer-file
                 (cons tempfile target-file))
         (rename-file tempfile target-file t)))))
 
@@ -2143,7 +2143,11 @@ See also `emacs-lisp-byte-compile-and-load'."
                     ;; Need to expand in case TARGET-FILE doesn't
                     ;; include a directory (Bug#45287).
                     (expand-file-name target-file))))
-              (byte-write-target-file (current-buffer) target-file)
+              (if byte-native-compiling
+                  ;; Defer elc production.
+                  (setf byte-to-native-output-buffer-file
+                        (cons (current-buffer) target-file))
+                (byte-write-target-file (current-buffer) target-file))
              (or noninteractive
                  byte-native-compiling
                  (message "Wrote %s" target-file)))
@@ -2164,7 +2168,8 @@ See also `emacs-lisp-byte-compile-and-load'."
                                  "Cannot overwrite file"
                                "Directory not writable or nonexistent")
                              target-file))))))
-         (kill-buffer (current-buffer)))
+          (unless byte-native-compiling
+           (kill-buffer (current-buffer))))
        (if (and byte-compile-generate-call-tree
                 (or (eq t byte-compile-generate-call-tree)
                     (y-or-n-p (format "Report call tree for %s? "
index e50538c4232430384a5cc5a343d702a4c5124727..c9cb2b1c7bee3fd49cbec4cd3db94027b5176692 100644 (file)
@@ -4212,11 +4212,13 @@ variable 'NATIVE_DISABLED' is set, only byte compile."
       (batch-byte-compile)
     (cl-assert (length= command-line-args-left 1))
     (let ((byte+native-compile t)
-          (byte-to-native-output-file nil))
+          (byte-to-native-output-buffer-file nil))
       (batch-native-compile)
-      (pcase byte-to-native-output-file
-        (`(,tempfile . ,target-file)
-         (rename-file tempfile target-file t)))
+      (pcase byte-to-native-output-buffer-file
+        (`(,temp-buffer . ,target-file)
+         (unwind-protect
+             (byte-write-target-file temp-buffer target-file))
+         (kill-buffer temp-buffer)))
       (setq command-line-args-left (cdr command-line-args-left)))))
 
 ;;;###autoload