• Lars Brinkhoff's avatar
    Make cl-defstruct use records. · 05654828
    Lars Brinkhoff authored
    * lisp/emacs-lisp/cl-extra.el (cl--describe-class)
    (cl--describe-class-slots): Use the new `type-of'.
    
    * lisp/emacs-lisp/cl-generic.el (cl--generic-struct-tag): Use type-of.
    (cl--generic-struct-specializers): Adjust to new tag.
    
    * lisp/emacs-lisp/cl-macs.el (cl-defstruct): When type is nil, use records.
    Use the type symbol as the tag.  Use copy-record to copy structs.
    (cl--defstruct-predicate): New function.
    (cl--pcase-mutually-exclusive-p): Use it.
    (cl-struct-sequence-type): Can now return `record'.
    
    * lisp/emacs-lisp/cl-preloaded.el (cl--make-slot-desc): Adjust ad-hoc
    code to new format.
    (cl--struct-register-child): Work with records.
    (cl-struct-define): Don't touch the tag's symbol-value and
    symbol-function slots when we use the type as tag.
    
    * lisp/emacs-lisp/cl-print.el (cl-print-object): Adjust to new tag.
    
    * test/lisp/emacs-lisp/cl-lib-tests.el (cl-lib-defstruct-record):
    New test.
    
    * doc/lispref/records.texi, doc/misc/cl.texi: Update for records.
    05654828
cl-extra.el 32.4 KB