X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=tests%2Fclos.impure.lisp;h=b4462cd453cc355fe2d9f767338145eb19b93177;hb=3aaed55326303bb377c4821c5e83b2e4e9c538fc;hp=ef478bf14613b337350db8d502635c2806548158;hpb=07e690d6ec0491352758ac278f2fa828a0a92e90;p=sbcl.git diff --git a/tests/clos.impure.lisp b/tests/clos.impure.lisp index ef478bf..b4462cd 100644 --- a/tests/clos.impure.lisp +++ b/tests/clos.impure.lisp @@ -318,6 +318,53 @@ (declare (special y)))) (assert-program-error (defgeneric bogus-declaration2 (x) (declare (notinline concatenate))))) +;;; CALL-NEXT-METHOD should call NO-NEXT-METHOD if there is no next +;;; method. +(defmethod no-next-method-test ((x integer)) (call-next-method)) +(assert (null (ignore-errors (no-next-method-test 1)))) +(defmethod no-next-method ((g (eql #'no-next-method-test)) m &rest args) + 'success) +(assert (eq (no-next-method-test 1) 'success)) +(assert (null (ignore-errors (no-next-method-test 'foo)))) + +;;; regression test for bug 176, following a fix that seems +;;; simultaneously to fix 140 while not exposing 176 (by Gerd +;;; Moellmann, merged in sbcl-0.7.9.12). +(dotimes (i 10) + (let ((lastname (intern (format nil "C176-~D" (1- i)))) + (name (intern (format nil "C176-~D" i)))) + (eval `(defclass ,name + (,@(if (= i 0) nil (list lastname))) + ())) + (eval `(defmethod initialize-instance :after ((x ,name) &rest any) + (declare (ignore any)))))) +(defclass b176 () (aslot-176)) +(defclass c176-0 (b176) ()) +(assert (= 1 (setf (slot-value (make-instance 'c176-9) 'aslot-176) 1))) + +;;; DEFINE-METHOD-COMBINATION was over-eager at checking for duplicate +;;; primary methods: +(define-method-combination dmc-test-mc (&optional (order :most-specific-first)) + ((around (:around)) + (primary (dmc-test-mc) :order order :required t)) + (let ((form (if (rest primary) + `(and ,@(mapcar #'(lambda (method) + `(call-method ,method)) + primary)) + `(call-method ,(first primary))))) + (if around + `(call-method ,(first around) + (,@(rest around) + (make-method ,form))) + form))) + +(defgeneric dmc-test-mc (&key k) + (:method-combination dmc-test-mc)) + +(defmethod dmc-test-mc dmc-test-mc (&key k) + k) + +(dmc-test-mc :k 1) ;;;; success