emacs-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Emacs-diffs] emacs-25 e4ac450: Define struct predicate before acccesors


From: Noam Postavsky
Subject: [Emacs-diffs] emacs-25 e4ac450: Define struct predicate before acccesors
Date: Sat, 10 Dec 2016 21:03:27 +0000 (UTC)

branch: emacs-25
commit e4ac4507968b839569b5ce12a9c4d0374dd46768
Author: Noam Postavsky <address@hidden>
Commit: Noam Postavsky <address@hidden>

    Define struct predicate before acccesors
    
    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 |   16 ++++++++--------
 1 file changed, 8 insertions(+), 8 deletions(-)

diff --git a/lisp/emacs-lisp/cl-macs.el b/lisp/emacs-lisp/cl-macs.el
index c51ed9d..b3a60b1 100644
--- a/lisp/emacs-lisp/cl-macs.el
+++ b/lisp/emacs-lisp/cl-macs.el
@@ -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



reply via email to

[Prev in Thread] Current Thread [Next in Thread]