* Introduce `emacs-lisp-native-compile'.

* lisp/progmodes/elisp-mode.el (emacs-lisp-native-compile): New command.
(emacs-lisp-native-compile-and-load): Make use of.
This commit is contained in:
Andrea Corallo 2023-08-10 10:18:43 +02:00
parent 063d7d89d7
commit 173af0cad5

View file

@ -221,6 +221,16 @@ All commands in `lisp-mode-shared-map' are inherited by this map."
(declare-function native-compile "comp") (declare-function native-compile "comp")
(declare-function comp-write-bytecode-file "comp") (declare-function comp-write-bytecode-file "comp")
(defun emacs-lisp-native-compile ()
"Native-compile synchronously the current file (if it has changed)."
(interactive nil emacs-lisp-mode)
(emacs-lisp--before-compile-buffer)
(let* ((byte+native-compile t)
(byte-to-native-output-buffer-file nil)
(eln (native-compile buffer-file-name)))
(when eln
(comp-write-bytecode-file eln))))
(defun emacs-lisp-native-compile-and-load () (defun emacs-lisp-native-compile-and-load ()
"Native-compile synchronously the current file (if it has changed). "Native-compile synchronously the current file (if it has changed).
Load the compiled code when finished. Load the compiled code when finished.
@ -229,11 +239,8 @@ Use `emacs-lisp-byte-compile-and-load' in combination with
`native-comp-jit-compilation' set to t to achieve asynchronous `native-comp-jit-compilation' set to t to achieve asynchronous
native compilation." native compilation."
(interactive nil emacs-lisp-mode) (interactive nil emacs-lisp-mode)
(emacs-lisp--before-compile-buffer) (when-let ((byte-file (emacs-lisp-native-compile)))
(let ((byte+native-compile t) (load (file-name-sans-extension byte-file))))
(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 () (defun emacs-lisp-macroexpand ()
"Macroexpand the form after point. "Macroexpand the form after point.