X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=tests%2Fclos.impure.lisp;h=c415f1a8ffa73d8750a311da34cc6eb428bcbd36;hb=11e1cd9c04181469f61558abd6133f085c0914fb;hp=54931c9a6e0a53409ddfcfe624a24cc4677d56cb;hpb=b9915e9a838059473beb4fa03a6410eb8d6b68e3;p=sbcl.git diff --git a/tests/clos.impure.lisp b/tests/clos.impure.lisp index 54931c9..c415f1a 100644 --- a/tests/clos.impure.lisp +++ b/tests/clos.impure.lisp @@ -896,7 +896,7 @@ ;;; Siivola. Not all methods for accessing slots are created equal... (defclass yet-another-obsoletion-super () ((obs :accessor obs-of :initform 0))) (defclass yet-another-obsoletion-sub (yet-another-obsoletion-super) ()) -(defmethod shared-initialize :after ((i yet-another-obsoletion-super) +(defmethod shared-initialize :after ((i yet-another-obsoletion-super) slots &rest init) (incf (obs-of i))) @@ -1231,4 +1231,41 @@ (let ((instance (make-instance 'slot-type-subclass))) (setf (slot-value instance 'slot) 3)) +;;; ctors where there's a non-standard SHARED-INITIALIZE method and an +;;; initarg which isn't self-evaluating (kpreid on #lisp 2006-01-29) +(defclass kpreid-enode () + ((slot :initarg not-a-keyword))) +(defmethod shared-initialize ((o kpreid-enode) slots &key &allow-other-keys) + (call-next-method)) +(defun make-kpreid-enode () + (make-instance 'kpreid-enode 'not-a-keyword 3)) +(with-test (:name (:ctor :non-keyword-initarg)) + (let ((x (make-kpreid-enode)) + (y (make-kpreid-enode))) + (= (slot-value x 'slot) (slot-value y 'slot)))) + +;;; defining a class hierarchy shouldn't lead to spurious classoid +;;; errors on TYPEP questions (reported by Tim Moore on #lisp +;;; 2006-03-10) +(defclass backwards-2 (backwards-1) (a b)) +(defclass backwards-3 (backwards-2) ()) +(defun typep-backwards-3 (x) + (typep x 'backwards-3)) +(defclass backwards-1 () (a b)) +(assert (not (typep-backwards-3 1))) +(assert (not (typep-backwards-3 (make-instance 'backwards-2)))) +(assert (typep-backwards-3 (make-instance 'backwards-3))) + +(defgeneric remove-method-1 (x) + (:method ((x integer)) (1+ x))) +(defgeneric remove-method-2 (x) + (:method ((x integer)) (1- x))) +(assert (eq #'remove-method-1 + (remove-method #'remove-method-1 + (find-method #'remove-method-2 + nil + (list (find-class 'integer)))))) +(assert (= (remove-method-1 3) 4)) +(assert (= (remove-method-2 3) 2)) + ;;;; success