mirror of
git://git.sv.gnu.org/emacs.git
synced 2025-12-06 06:20:55 -08:00
* lisp/emacs-lisp/cl-preloaded.el: Fix the format of props in slot-descs
(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.
This commit is contained in:
parent
1283e1db9b
commit
3788d2237d
2 changed files with 13 additions and 18 deletions
|
|
@ -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))
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue