]> git.eshelyaron.com Git - emacs.git/commitdiff
Define struct predicate before acccesors
authorNoam Postavsky <npostavs@gmail.com>
Fri, 2 Dec 2016 05:03:57 +0000 (00:03 -0500)
committerNoam Postavsky <npostavs@gmail.com>
Sat, 10 Dec 2016 21:00:01 +0000 (16:00 -0500)
The accessor functions use the predicate function, which causes problems
when reloading after unload-feature: the compiler-macro property is
still present on the predicate symbol, and the compiler fails to find
the definition when trying to inline it into the accessor
function (Bug#25088).

* lisp/emacs-lisp/cl-macs.el (cl-defstruct): Move predicate definition
before field accessor definitions.

lisp/emacs-lisp/cl-macs.el

index c51ed9d8770a49a8b92dd569b7465a6ca229389c..b3a60b1b225cb2df70dec97054c0c8646656bd44 100644 (file)
@@ -2687,6 +2687,14 @@ non-nil value, that slot cannot be set via `setf'.
                                   (= safety 1))
                              (cons 'and (cl-cdddr pred-form))
                             `(,predicate cl-x))))
+    (when pred-form
+      (push `(cl-defsubst ,predicate (cl-x)
+               (declare (side-effect-free error-free))
+               ,(if (eq (car pred-form) 'and)
+                    (append pred-form '(t))
+                  `(and ,pred-form t)))
+            forms)
+      (push `(put ',name 'cl-deftype-satisfies ',predicate) forms))
     (let ((pos 0) (descp descs))
       (while descp
        (let* ((desc (pop descp))
@@ -2741,14 +2749,6 @@ non-nil value, that slot cannot be set via `setf'.
        (setq pos (1+ pos))))
     (setq slots (nreverse slots)
          defaults (nreverse defaults))
-    (when pred-form
-      (push `(cl-defsubst ,predicate (cl-x)
-               (declare (side-effect-free error-free))
-               ,(if (eq (car pred-form) 'and)
-                    (append pred-form '(t))
-                  `(and ,pred-form t)))
-            forms)
-      (push `(put ',name 'cl-deftype-satisfies ',predicate) forms))
     (and copier
          (push `(defalias ',copier #'copy-sequence) forms))
     (if constructor