From: Stefan Monnier Date: Thu, 15 Jan 2015 13:38:00 +0000 (-0500) Subject: * lisp/emacs-lisp/cl-generic.el (cl--generic-build-combined-method): X-Git-Tag: emacs-25.0.90~2597^2~23 X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=9d940c667ab1dadc9d25a88cc2af1594b6c1bb49;p=emacs.git * lisp/emacs-lisp/cl-generic.el (cl--generic-build-combined-method): Return the value of the primary rather than the after method. --- diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 57aaea0f4ce..c6e315e1260 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -38,6 +38,9 @@ 2015-01-15 Stefan Monnier + * emacs-lisp/cl-generic.el (cl--generic-build-combined-method): + Return the value of the primary rather than the after method. + * emacs-lisp/eieio-core.el: Provide support for cl-generic. (eieio--generic-tagcode): New function. (cl-generic-tagcode-function): Use it. diff --git a/lisp/emacs-lisp/cl-generic.el b/lisp/emacs-lisp/cl-generic.el index 41a419a3c4a..21688bef18a 100644 --- a/lisp/emacs-lisp/cl-generic.el +++ b/lisp/emacs-lisp/cl-generic.el @@ -411,9 +411,10 @@ for all those different tags in the method-cache.") (setq fun (lambda (&rest args) (dolist (bf before) (apply bf args)) - (apply next args) - (dolist (af after) - (apply af args)))))) + (prog1 + (apply next args) + (dolist (af after) + (apply af args))))))) (cl--generic-nest fun (alist-get :around mets-by-qual)))))))) (defun cl--generic-cache-miss (generic dispatch-arg dispatches-left tags) diff --git a/test/automated/cl-generic-tests.el b/test/automated/cl-generic-tests.el index 17bce6a3157..57b17b145e8 100644 --- a/test/automated/cl-generic-tests.el +++ b/test/automated/cl-generic-tests.el @@ -129,5 +129,18 @@ (cons "x&y-int" (cl-call-next-method))) (should (equal (cl--generic-1 1 2) '("x&y-int" "y-int" "x-int" 1 2)))) +(ert-deftest cl-generic-test-7-after/before () + (let ((log ())) + (cl-defgeneric cl--generic-1 (x y)) + (cl-defmethod cl--generic-1 ((_x t) y) (cons y log)) + (cl-defmethod cl--generic-1 ((_x (eql 4)) _y) + (cons "quatre" (cl-call-next-method))) + (cl-defmethod cl--generic-1 :after (x _y) + (push (list :after x) log)) + (cl-defmethod cl--generic-1 :before (x _y) + (push (list :before x) log)) + (should (equal (cl--generic-1 4 6) '("quatre" 6 (:before 4)))) + (should (equal log '((:after 4) (:before 4)))))) + (provide 'cl-generic-tests) ;;; cl-generic-tests.el ends here