]> git.eshelyaron.com Git - emacs.git/commitdiff
* lisp/emacs-lisp/cl-generic.el (cl--generic-build-combined-method):
authorStefan Monnier <monnier@iro.umontreal.ca>
Thu, 15 Jan 2015 13:38:00 +0000 (08:38 -0500)
committerStefan Monnier <monnier@iro.umontreal.ca>
Fri, 16 Jan 2015 22:48:59 +0000 (17:48 -0500)
Return the value of the primary rather than the after method.

lisp/ChangeLog
lisp/emacs-lisp/cl-generic.el
test/automated/cl-generic-tests.el

index 57aaea0f4ce0c77da9225bdbb2ea3e2e975bd07d..c6e315e1260a86be29f21d5e3fda2300aeb6f93b 100644 (file)
@@ -38,6 +38,9 @@
 
 2015-01-15  Stefan Monnier  <monnier@iro.umontreal.ca>
 
+       * 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.
index 41a419a3c4a02f13b352fb0e0677f7934e368fbd..21688bef18aefec3781e36d223a1d18db9fab9ef 100644 (file)
@@ -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)
index 17bce6a31575c6cc943d6f4f5a7b287418d14e8b..57b17b145e82a24322a9421d0ff92d35ef011c93 100644 (file)
     (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