Skip to content

Commit

Permalink
* lisp/emacs-lisp/cl-preloaded.el: Fix the format of props in slot-descs
Browse files Browse the repository at this point in the history
(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.
  • Loading branch information
monnier committed Jun 24, 2021
1 parent 1283e1d commit 3788d22
Show file tree
Hide file tree
Showing 2 changed files with 13 additions and 18 deletions.
10 changes: 2 additions & 8 deletions lisp/emacs-lisp/cl-extra.el
Original file line number Diff line number Diff line change
Expand Up @@ -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)))))
Expand Down
21 changes: 11 additions & 10 deletions lisp/emacs-lisp/cl-preloaded.el
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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))
Expand Down

0 comments on commit 3788d22

Please sign in to comment.