diff options
author | Stefan Monnier <monnier@iro.umontreal.ca> | 2015-01-26 09:04:55 -0500 |
---|---|---|
committer | Stefan Monnier <monnier@iro.umontreal.ca> | 2015-01-26 09:04:55 -0500 |
commit | 4cdde9196fb4fafb00b0c51b908fd605274147bd (patch) | |
tree | 34b825a588203225f126027cff47f95772af2a28 /lisp/emacs-lisp/eieio-compat.el | |
parent | 242354a23acf214ad06d4e3e7e5f5580c8b21d4a (diff) | |
download | emacs-4cdde9196fb4fafb00b0c51b908fd605274147bd.tar.gz |
* lisp/emacs-lisp/cl-generic.el: Add a method-combination hook.
(cl-generic-method-combination-function): New var.
(cl--generic-lambda): Remove `with-cnm' arg.
(cl-defmethod): Change accordingly.
(cl-generic-define-method): Don't check qualifiers validity.
Preserve all qualifiers in `method-table'.
(cl-generic-call-method): New function.
(cl--generic-nest): Remove (morph into cl-generic-call-method).
(cl--generic-build-combined-method): Adjust to new format of method-table
and use cl-generic-method-combination-function.
(cl--generic-standard-method-combination): New function, extracted from
cl--generic-build-combined-method.
(cl--generic-cnm-sample): Adjust to new format of method-table.
* lisp/emacs-lisp/eieio-compat.el (eieio--defmethod): Use () qualifiers
instead of :primary.
* lisp/emacs-lisp/eieio-datadebug.el (eieio-debug-methodinvoke):
Remove obsolete function.
* test/automated/cl-generic-tests.el (cl-generic-test-11-next-method-p):
New test.
Diffstat (limited to 'lisp/emacs-lisp/eieio-compat.el')
-rw-r--r-- | lisp/emacs-lisp/eieio-compat.el | 6 |
1 files changed, 4 insertions, 2 deletions
diff --git a/lisp/emacs-lisp/eieio-compat.el b/lisp/emacs-lisp/eieio-compat.el index c2dabf7f446..30bb5cee994 100644 --- a/lisp/emacs-lisp/eieio-compat.el +++ b/lisp/emacs-lisp/eieio-compat.el @@ -181,7 +181,8 @@ Summary: (lambda (generic arg &rest args) (apply code arg generic args))) (_ code)))) (cl-generic-define-method - method (if kind (list kind)) specializers uses-cnm + method (unless (memq kind '(nil :primary)) (list kind)) + specializers uses-cnm (if uses-cnm (let* ((docstring (documentation code 'raw)) (args (help-function-arglist code 'preserve-names)) @@ -201,10 +202,11 @@ Summary: ;; applicable but only of the before/after kind. So if we add a :before ;; or :after, make sure there's a matching dummy primary. (when (and (memq kind '(:before :after)) + ;; FIXME: Use `cl-find-method'? (not (assoc (cons (mapcar (lambda (arg) (if (consp arg) (nth 1 arg) t)) specializers) - :primary) + nil) (cl--generic-method-table (cl--generic method))))) (cl-generic-define-method method () specializers t (lambda (cnm &rest args) |