]> git.eshelyaron.com Git - emacs.git/commitdiff
* lisp/emacs-lisp/cl-preloaded.el: Fix the format of props in slot-descs
authorStefan Monnier <monnier@iro.umontreal.ca>
Thu, 24 Jun 2021 21:32:20 +0000 (17:32 -0400)
committerStefan Monnier <monnier@iro.umontreal.ca>
Thu, 24 Jun 2021 21:32:20 +0000 (17:32 -0400)
(cl--plist-remove): Remove.
(cl--plist-to-alist): New function.
(cl-struct-define): Use it to convert slots's properties to the
format expected by `cl-slot-descriptor`.

* lisp/emacs-lisp/cl-extra.el (cl--describe-class-slots): Revert last
changes, not needed any more.

lisp/emacs-lisp/cl-extra.el
lisp/emacs-lisp/cl-preloaded.el

index c30349de6bba13fdbef8260f501c0e084f162ab4..3840d13ecffb6e6e11975851636d4fd481d5eac4 100644 (file)
@@ -901,14 +901,8 @@ Outputs to the current buffer."
                (list (cl-prin1-to-string (cl--slot-descriptor-name slot))
                      (cl-prin1-to-string (cl--slot-descriptor-type slot))
                      (cl-prin1-to-string (cl--slot-descriptor-initform slot))
-                     (let ((doc
-                            ;; The props are an alist in a `defclass',
-                            ;; but a plist when describing a `cl-defstruct'.
-                            (if (consp (car (cl--slot-descriptor-props slot)))
-                                (alist-get :documentation
-                                           (cl--slot-descriptor-props slot))
-                              (plist-get (cl--slot-descriptor-props slot)
-                                         :documentation))))
+                     (let ((doc (alist-get :documentation
+                                           (cl--slot-descriptor-props slot))))
                        (if (not doc) ""
                          (setq has-doc t)
                          (substitute-command-keys doc)))))
index 7365e23186a06aec83a289e7913b75cfa278215b..ef60b266f9efbdfbe63d7f609240e88b9124993b 100644 (file)
@@ -124,12 +124,11 @@ supertypes from the most specific to least specific.")
                             (get name 'cl-struct-print))
           (cl--find-class name)))))
 
-(defun cl--plist-remove (plist member)
-  (cond
-   ((null plist) nil)
-   ((null member) plist)
-   ((eq plist member) (cddr plist))
-   (t `(,(car plist) ,(cadr plist) ,@(cl--plist-remove (cddr plist) member)))))
+(defun cl--plist-to-alist (plist)
+  (let ((res '()))
+    (while plist
+      (push (cons (pop plist) (pop plist)) res))
+    (nreverse res)))
 
 (defun cl--struct-register-child (parent tag)
   ;; Can't use (cl-typep parent 'cl-structure-class) at this stage
@@ -164,12 +163,14 @@ supertypes from the most specific to least specific.")
                        (i 0)
                        (offset (if type 0 1)))
                    (dolist (slot slots)
-                     (let* ((props (cddr slot))
-                            (typep (plist-member props :type))
-                            (type (if typep (cadr typep) t)))
+                     (let* ((props (cl--plist-to-alist (cddr slot)))
+                            (typep (assq :type props))
+                            (type (if (null typep) t
+                                    (setq props (delq typep props))
+                                    (cdr typep))))
                        (aset v i (cl--make-slot-desc
                                   (car slot) (nth 1 slot)
-                                  type (cl--plist-remove props typep))))
+                                  type props)))
                      (puthash (car slot) (+ i offset) index-table)
                      (cl-incf i))
                    v))