• Stefan Monnier's avatar
    EIEIO: Change class's representation to unify instance & class slots · 50c117fe
    Stefan Monnier authored
    * lisp/emacs-lisp/eieio-core.el (eieio--class): Change field names and order
    to match those of cl--class; use cl--slot for both instance slots and
    class slots.
    (eieio--object-num-slots): Use cl-struct-slot-info.
    (eieio--object-class): Rename from eieio--object-class-object.
    (eieio--object-class-name): Remove.
    (eieio-defclass-internal): Adjust to new slot representation.
    Store doc in class rather than in `variable-documentation'.
    (eieio--perform-slot-validation-for-default): Change API to take
    a slot object.
    (eieio--slot-override): New function.
    (eieio--add-new-slot): Rewrite.
    (eieio-copy-parents-into-subclass): Rewrite.
    (eieio--validate-slot-value, eieio--validate-class-slot-value)
    (eieio-oref-default, eieio-oset-default)
    (eieio--class-slot-name-index, eieio-set-defaults): Adjust to new
    slot representation.
    (eieio--c3-merge-lists): Simplify.
    (eieio--class/struct-parents): New function.
    (eieio--class-precedence-bfs): Use it.
    
    * lisp/emacs-lisp/eieio.el (with-slots): Use macroexp-let2.
    (object-class-fast): Change recommend replacement.
    (eieio-object-class): Rewrite.
    (slot-exists-p): Adjust to new slot representation.
    (initialize-instance): Adjust to new slot representation.
    (object-write): Adjust to new slot representation.
    
    * lisp/emacs-lisp/eieio-base.el (eieio-persistent-convert-list-to-object):
    Manually map initargs to slot names.
    (eieio-persistent-validate/fix-slot-value): Adjust to new
    slot representation.
    
    * lisp/emacs-lisp/eieio-compat.el (eieio--generic-static-symbol-specializers):
    Extract from eieio--generic-static-symbol-generalizer.
    (eieio--generic-static-symbol-generalizer): Use it.
    
    * lisp/emacs-lisp/eieio-custom.el (eieio-object-value-create)
    (eieio-object-value-get): Adjust to new slot representation.
    
    * lisp/emacs-lisp/eieio-datadebug.el (data-debug/eieio-insert-slots):
    Declare to silence warnings.
    (data-debug-insert-object-button): Avoid `object-slots'.
    (data-debug/eieio-insert-slots): Adjust to new slot representation.
    
    * lisp/emacs-lisp/eieio-opt.el (eieio--help-print-slot): New function
    extracted from eieio-help-class-slots.
    (eieio-help-class-slots): Use it.  Adjust to new slot representation.
    
    * test/automated/eieio-test-methodinvoke.el (make-instance): Use new-style
    `subclass' specializer for a change.
    
    * test/automated/eieio-test-persist.el (persist-test-save-and-compare):
    Adjust to new slot representation.
    
    * test/automated/eieio-tests.el (eieio-test-17-virtual-slot): Don't use
    initarg in `oset'.
    (eieio-test-32-slot-attribute-override-2): Adjust to new
    slot representation.
    
    * lisp/emacs-lisp/cl-preloaded.el (cl--class): Fix type of `parents'.
    50c117fe
eieio-opt.el 16.4 KB