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:
parent
8861ee8b08
commit
4f0e879030
2 changed files with 17 additions and 10 deletions
|
|
@ -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 ()
|
||||
|
|
|
|||
|
|
@ -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))))
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue