]> git.eshelyaron.com Git - emacs.git/commitdiff
Rework `native-compile' interface so it can return compiled functions
authorAndrea Corallo <akrl@sdf.org>
Mon, 12 Oct 2020 20:34:57 +0000 (22:34 +0200)
committerAndrea Corallo <akrl@sdf.org>
Wed, 14 Oct 2020 09:04:36 +0000 (11:04 +0200)
* 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.

lisp/emacs-lisp/comp.el
test/src/comp-tests.el

index 98f552599e99409bfb9ca143063ac89ac584ee49..cd13c44fa91afa38d6d9ca6139b55986236529fb 100644 (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 ()
index 317a6113af2f92b76378ff426ff716cf18d09d39..79bac3f711fba6d0ff76a27849ebe604abf72a38 100644 (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))))