diff options
| author | Stefan Monnier <monnier@iro.umontreal.ca> | 2015-10-29 10:33:36 -0400 |
|---|---|---|
| committer | Stefan Monnier <monnier@iro.umontreal.ca> | 2015-10-29 10:33:36 -0400 |
| commit | aa1c4ae271733cf7dc64918b570bab4034488fa1 (patch) | |
| tree | ae25c2ee8a08e885354de4a8793f871c7723168a /lisp/emacs-lisp/eieio-compat.el | |
| parent | c0d866dd690ffef08894dbce573c636ab0b42665 (diff) | |
| download | emacs-aa1c4ae271733cf7dc64918b570bab4034488fa1.tar.gz | |
* lisp/emacs-lisp/cl-generic.el: Accomodate future changes
(cl--generic-generalizer): Add `name' field.
(cl-generic-make-generalizer): Add corresponding `name' argument.
(cl-generic-define-generalizer): New macro.
(cl--generic-head-generalizer, cl--generic-eql-generalizer)
(cl--generic-struct-generalizer, cl--generic-typeof-generalizer)
(cl--generic-t-generalizer): Use it.
(cl-generic-ensure-function): Add `noerror' argument.
(cl-generic-define): Use it so we don't follow aliases.
(cl-generic-define-method): Preserve pre-existing ordering of methods.
(cl--generic-arg-specializer): New function.
(cl--generic-cache-miss): Use it.
(cl-generic-generalizers): Only fset a temporary definition
during bootstrap.
(cl--generic-struct-tag, cl--generic-struct-specializers):
Allow extra arguments.
* lisp/emacs-lisp/eieio-compat.el (eieio--generic-static-symbol-generalizer)
(eieio--generic-static-object-generalizer): Use cl-generic-define-generalizer.
(eieio--generic-static-symbol-specializers): Allow extra arguments.
* lisp/emacs-lisp/eieio-core.el (eieio--generic-generalizer)
(eieio--generic-subclass-generalizer): Use cl-generic-define-generalizer.
(eieio--generic-subclass-specializers): Allow extra arguments.
Diffstat (limited to 'lisp/emacs-lisp/eieio-compat.el')
| -rw-r--r-- | lisp/emacs-lisp/eieio-compat.el | 42 |
1 files changed, 20 insertions, 22 deletions
diff --git a/lisp/emacs-lisp/eieio-compat.el b/lisp/emacs-lisp/eieio-compat.el index 386ff2f7449..638c475ef2b 100644 --- a/lisp/emacs-lisp/eieio-compat.el +++ b/lisp/emacs-lisp/eieio-compat.el @@ -124,7 +124,7 @@ Summary: (defgeneric ,method ,args) (eieio--defmethod ',method ',key ',class #',code)))) -(defun eieio--generic-static-symbol-specializers (tag) +(defun eieio--generic-static-symbol-specializers (tag &rest _) (cl-assert (or (null tag) (eieio--class-p tag))) (when (eieio--class-p tag) (let ((superclasses (eieio--generic-subclass-specializers tag)) @@ -134,27 +134,25 @@ Summary: (push `(eieio--static ,(cadr superclass)) specializers)) (nreverse specializers)))) -(defconst eieio--generic-static-symbol-generalizer - (cl-generic-make-generalizer - ;; Give it a slightly higher priority than `subclass' so that the - ;; interleaved list comes before subclass's non-interleaved list. - 61 (lambda (name) `(and (symbolp ,name) (cl--find-class ,name))) - #'eieio--generic-static-symbol-specializers)) -(defconst eieio--generic-static-object-generalizer - (cl-generic-make-generalizer - ;; Give it a slightly higher priority than `class' so that the - ;; interleaved list comes before the class's non-interleaved list. - 51 #'cl--generic-struct-tag - (lambda (tag) - (and (symbolp tag) (boundp tag) (setq tag (symbol-value tag)) - (eieio--class-p tag) - (let ((superclasses (eieio--class-precedence-list tag)) - (specializers ())) - (dolist (superclass superclasses) - (setq superclass (eieio--class-name superclass)) - (push superclass specializers) - (push `(eieio--static ,superclass) specializers)) - (nreverse specializers)))))) +(cl-generic-define-generalizer eieio--generic-static-symbol-generalizer + ;; Give it a slightly higher priority than `subclass' so that the + ;; interleaved list comes before subclass's non-interleaved list. + 61 (lambda (name &rest _) `(and (symbolp ,name) (cl--find-class ,name))) + #'eieio--generic-static-symbol-specializers) +(cl-generic-define-generalizer eieio--generic-static-object-generalizer + ;; Give it a slightly higher priority than `class' so that the + ;; interleaved list comes before the class's non-interleaved list. + 51 #'cl--generic-struct-tag + (lambda (tag _targets) + (and (symbolp tag) (boundp tag) (setq tag (symbol-value tag)) + (eieio--class-p tag) + (let ((superclasses (eieio--class-precedence-list tag)) + (specializers ())) + (dolist (superclass superclasses) + (setq superclass (eieio--class-name superclass)) + (push superclass specializers) + (push `(eieio--static ,superclass) specializers)) + (nreverse specializers))))) (cl-defmethod cl-generic-generalizers ((_specializer (head eieio--static))) (list eieio--generic-static-symbol-generalizer |
