emacs-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Emacs-diffs] master 9d940c6 1/2: * lisp/emacs-lisp/cl-generic.el (cl--g


From: Stefan Monnier
Subject: [Emacs-diffs] master 9d940c6 1/2: * lisp/emacs-lisp/cl-generic.el (cl--generic-build-combined-method):
Date: Fri, 16 Jan 2015 22:49:20 +0000

branch: master
commit 9d940c667ab1dadc9d25a88cc2af1594b6c1bb49
Author: Stefan Monnier <address@hidden>
Commit: Stefan Monnier <address@hidden>

    * lisp/emacs-lisp/cl-generic.el (cl--generic-build-combined-method):
    Return the value of the primary rather than the after method.
---
 lisp/ChangeLog                     |    3 +++
 lisp/emacs-lisp/cl-generic.el      |    7 ++++---
 test/automated/cl-generic-tests.el |   13 +++++++++++++
 3 files changed, 20 insertions(+), 3 deletions(-)

diff --git a/lisp/ChangeLog b/lisp/ChangeLog
index 57aaea0..c6e315e 100644
--- a/lisp/ChangeLog
+++ b/lisp/ChangeLog
@@ -38,6 +38,9 @@
 
 2015-01-15  Stefan Monnier  <address@hidden>
 
+       * 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 41a419a..21688be 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 17bce6a..57b17b1 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



reply via email to

[Prev in Thread] Current Thread [Next in Thread]