]> git.eshelyaron.com Git - emacs.git/commitdiff
Fix the bootstrap differently, so zerop can be where it belongs
authorStefan Monnier <monnier@iro.umontreal.ca>
Thu, 12 Jul 2018 14:29:28 +0000 (10:29 -0400)
committerStefan Monnier <monnier@iro.umontreal.ca>
Thu, 12 Jul 2018 14:29:28 +0000 (10:29 -0400)
Suggested by Robert Pluim <rpluim@gmail.com>.

* lisp/emacs-lisp/byte-run.el (defun-declarations-alist): Avoid cadr/cddr.
* lisp/subr.el (zerop): Un-revert 2018-07-10T23:08:58-07:00!contovob@tcd.ie.

lisp/emacs-lisp/byte-run.el
lisp/subr.el

index aa10bd3e804d42ae03f8c91814ff45953faa61a0..5edf5a28db8257dfd124d3e235bda4572339bf29 100644 (file)
@@ -116,7 +116,10 @@ If `error-free', drop calls even if `byte-compile-delete-errors' is nil.")
              (if (not (eq (car-safe compiler-function) 'lambda))
                  `(eval-and-compile
                     (function-put ',f 'compiler-macro #',compiler-function))
-               (let ((cfname (intern (concat (symbol-name f) "--anon-cmacro"))))
+               (let ((cfname (intern (concat (symbol-name f) "--anon-cmacro")))
+                     ;; Avoid cadr/cddr so we can use `compiler-macro' before
+                     ;; defining cadr/cddr.
+                     (data (cdr compiler-function)))
                  `(progn
                     (eval-and-compile
                       (function-put ',f 'compiler-macro #',cfname))
@@ -125,8 +128,8 @@ If `error-free', drop calls even if `byte-compile-delete-errors' is nil.")
                     ;; if needed.
                     :autoload-end
                     (eval-and-compile
-                      (defun ,cfname (,@(cadr compiler-function) ,@args)
-                        ,@(cddr compiler-function))))))))
+                      (defun ,cfname (,@(car data) ,@args)
+                        ,@(cdr data))))))))
    (list 'doc-string
          #'(lambda (f _args pos)
              (list 'function-put (list 'quote f)
index a5108eb6558319d5fe1324c9e99139135301e179..10343e69db8e017ffcfa717b92ac5a2f90f83846 100644 (file)
@@ -359,6 +359,13 @@ was called."
   (lambda (&rest args2)
     (apply fun (append args args2))))
 
+(defun zerop (number)
+  "Return t if NUMBER is zero."
+  ;; Used to be in C, but it's pointless since (= 0 n) is faster anyway because
+  ;; = has a byte-code.
+  (declare (compiler-macro (lambda (_) `(= 0 ,number))))
+  (= 0 number))
+
 \f
 ;;;; List functions.
 
@@ -548,16 +555,6 @@ If N is omitted or nil, remove the last element."
           (if (> n 0) (setcdr (nthcdr (- (1- m) n) list) nil))
           list))))
 
-;; This function appears here instead of under the 'Basic Lisp
-;; functions' heading because during bootstrap its compiler-macro
-;; requires functions defined under the 'List functions' heading.
-(defun zerop (number)
-  "Return t if NUMBER is zero."
-  ;; Used to be in C, but it's pointless since (= 0 n) is faster anyway because
-  ;; = has a byte-code.
-  (declare (compiler-macro (lambda (_) `(= 0 ,number))))
-  (= 0 number))
-
 (defun proper-list-p (object)
   "Return OBJECT's length if it is a proper list, nil otherwise.
 A proper list is neither circular nor dotted (i.e., its last cdr