1
Fork 0
mirror of git://git.sv.gnu.org/emacs.git synced 2026-02-05 15:11:30 -08:00

Rework `native-compile' interface so it can return compiled functions

* lisp/emacs-lisp/comp.el (native-compile): Return the compiled
	function when the input is a symbol or a form.
	* test/src/comp-tests.el (free-fun, tco, fw-prop): Update tests
	for new `native-compile' interface.
This commit is contained in:
Andrea Corallo 2020-10-12 22:34:57 +02:00
parent 8861ee8b08
commit 4f0e879030
2 changed files with 17 additions and 10 deletions

View file

@ -2854,12 +2854,16 @@ display a message."
;;;###autoload
(defun native-compile (function-or-file &optional with-late-load output)
"Compile FUNCTION-OR-FILE into native code.
This is the entry-point for the Emacs Lisp native compiler.
FUNCTION-OR-FILE is a function symbol or a path to an Elisp file.
When WITH-LATE-LOAD non-nil mark the compilation unit for late load
once finished compiling (internal use only).
When OUTPUT is non-nil use it as filename for the compiled object.
Return the compile object filename."
This is the syncronous entry-point for the Emacs Lisp native
compiler.
FUNCTION-OR-FILE is a function symbol, a form or the
filename of an Emacs Lisp source file.
When WITH-LATE-LOAD non-nil mark the compilation unit for late
load once finished compiling (internal use only). When OUTPUT is
non-nil use it as filename for the compiled object.
If FUNCTION-OR-FILE is a filename return the filename of the
compiled object. If FUNCTION-OR-FILE is a function symbol or a
form return the compiled function."
(comp-ensure-native-compiler)
(unless (or (functionp function-or-file)
(stringp function-or-file))
@ -2888,7 +2892,10 @@ Return the compile object filename."
(signal (car err) (if (consp err-val)
(cons function-or-file err-val)
(list function-or-file err-val))))))
data))
(if (stringp function-or-file)
data
;; So we return the compiled function.
(native-elisp-load data))))
;;;###autoload
(defun batch-native-compile ()

View file

@ -359,7 +359,7 @@ Check that the resulting binaries do not differ."
(interactive)
3)
t)
(load (native-compile #'comp-tests-free-fun-f))
(native-compile #'comp-tests-free-fun-f)
(should (subr-native-elisp-p (symbol-function #'comp-tests-free-fun-f)))
(should (= (comp-tests-free-fun-f) 3))
@ -692,7 +692,7 @@ CHECKER should always return nil to have a pass."
b
(comp-tests-tco-f (+ a b) a (- count 1))))
t)
(load (native-compile #'comp-tests-tco-f))
(native-compile #'comp-tests-tco-f)
(should (subr-native-elisp-p (symbol-function #'comp-tests-tco-f)))
(should (= (comp-tests-tco-f 1 0 10) 55))))
@ -714,7 +714,7 @@ CHECKER should always return nil to have a pass."
(c (concat a b))) ; <= has to optimize
(length c))) ; <= has to optimize
t)
(load (native-compile #'comp-tests-fw-prop-1-f))
(native-compile #'comp-tests-fw-prop-1-f)
(should (subr-native-elisp-p (symbol-function #'comp-tests-fw-prop-1-f)))
(should (= (comp-tests-fw-prop-1-f) 6))))