From: Alexey Dejneka Date: Sun, 20 Jul 2003 08:23:17 +0000 (+0000) Subject: 0.8.1.49: X-Git-Url: http://repo.macrolet.net/gitweb/?a=commitdiff_plain;h=28b4b70473ad927acb2aee6d3a8cb3f107b02864;p=sbcl.git 0.8.1.49: * Fix bug 262: LOAD-DEFMETHOD-INTERNAL checks whether GF has any methods before calling FIND-METHOD; ... late condition slot installers do not overwrite GF lambda list. --- diff --git a/BUGS b/BUGS index 44aa72d..959f0aa 100644 --- a/BUGS +++ b/BUGS @@ -1067,31 +1067,6 @@ WORKAROUND: Urgh... It's time to write IR1-copier. -262: - In 0.8.1.32: - - * (ensure-generic-function 'foo) - # - * (defmethod foo (x) x) - debugger invoked on condition of type SIMPLE-ERROR: - The generic function # takes 0 required - arguments; was asked to find a method with specializers (#) - - AMOP seems to say that it should work (first ADD-METHOD initializes - GF lambda list). - -264: - (reported by on #lisp 2003-07-16) - - (progv '(foo) '(1) - (eval '(symbol-macrolet ((foo 3)) - (declare (special foo)) - foo))) - - does not signal an error. - - (fixed in 0.8.1.37) - 265: SB-EXT:RUN-PROGRAM is currently non-functional on Linux/PPC; attempting to use it leads to segmentation violations. This is @@ -1117,6 +1092,15 @@ WORKAROUND: is allowed to by CLHS 3.2.2.3. CMUCL, however, does perform this optimization. +268: "wrong free declaration scope" + The following code must signal type error: + + (locally (declare (optimize (safety 3))) + (flet ((foo (x &optional (y (car x))) + (declare (optimize (safety 0))) + (list x y))) + (funcall (eval #'foo) 1))) + DEFUNCT CATEGORIES OF BUGS IR1-#: These labels were used for bugs related to the old IR1 interpreter. diff --git a/src/code/late-condition.lisp b/src/code/late-condition.lisp index 7070f60..afd22b5 100644 --- a/src/code/late-condition.lisp +++ b/src/code/late-condition.lisp @@ -15,11 +15,11 @@ (fmakunbound 'install-condition-slot-writer) (defun install-condition-slot-reader (name condition slot-name) (unless (fboundp name) - (ensure-generic-function name :lambda-list '(condition))) + (ensure-generic-function name)) (eval `(defmethod ,name ((.condition. ,condition)) (condition-reader-function .condition. ',slot-name)))) (defun install-condition-slot-writer (name condition slot-name) (unless (fboundp name) - (ensure-generic-function name :lambda-list '(new-value condition))) + (ensure-generic-function name)) (eval `(defmethod ,name (new-value (.condition. ,condition)) (condition-writer-function .condition. new-value ',slot-name)))) diff --git a/src/pcl/boot.lisp b/src/pcl/boot.lisp index ab5388d..b0ba8d2 100644 --- a/src/pcl/boot.lisp +++ b/src/pcl/boot.lisp @@ -1362,6 +1362,7 @@ bootstrapping. (fboundp gf-spec)) (let* ((gf (fdefinition gf-spec)) (method (and (generic-function-p gf) + (generic-function-methods gf) (find-method gf qualifiers (parse-specializers specializers) diff --git a/tests/clos.impure.lisp b/tests/clos.impure.lisp index 2f8d99c..405a219 100644 --- a/tests/clos.impure.lisp +++ b/tests/clos.impure.lisp @@ -676,5 +676,12 @@ (let ((f (compile nil `(lambda () (make-instance ',class-name))))) (assert (typep (funcall f) class-name)))) +;;; bug 262: DEFMETHOD failed on a generic function without a lambda +;;; list +(ensure-generic-function 'bug262) +(defmethod bug262 (x y) + (list x y)) +(assert (equal (bug262 1 2) '(1 2))) + ;;;; success (sb-ext:quit :unix-status 104) diff --git a/version.lisp-expr b/version.lisp-expr index 1915734..250e43c 100644 --- a/version.lisp-expr +++ b/version.lisp-expr @@ -17,4 +17,4 @@ ;;; checkins which aren't released. (And occasionally for internal ;;; versions, especially for internal versions off the main CVS ;;; branch, it gets hairier, e.g. "0.pre7.14.flaky4.13".) -"0.8.1.48" +"0.8.1.49"