From 64a50ee0d70f2e87f3d284d1c7a48a2e0762ea90 Mon Sep 17 00:00:00 2001 From: William Harold Newman Date: Thu, 13 Jun 2002 00:47:51 +0000 Subject: [PATCH] 0.7.4.29: merged patch: APD ANSI compliance bugfix for DECLARE IGNORABLE of special variable (sbcl-devel 2002-06-12) Whether or not my alternative fix for the CALL-NEXT-METHOD type warning bug (being carefully reviewed on sbcl-devel even as I write:-) is OK, I might as well at least stuff the exploratory test cases I wrote for it into tests/. Bug 137 (useless debug names e.g. in BACKTRACE) seems to be gone, since at least I haven't stumbled across it recently, so delete the BUGS entry. --- BUGS | 12 ------------ doc/intro.sgml | 4 ++-- doc/sbcl.1 | 4 ++-- src/compiler/ir1tran.lisp | 2 +- src/runtime/runtime.c | 2 +- tests/clos.impure.lisp | 27 +++++++++++++++++++++++++++ version.lisp-expr | 2 +- 7 files changed, 34 insertions(+), 19 deletions(-) diff --git a/BUGS b/BUGS index cd8dc40..e2f775e 100644 --- a/BUGS +++ b/BUGS @@ -972,18 +972,6 @@ WORKAROUND: (let ((x (1+ x))) (call-next-method))) Now (FOO 3) should return 3, but instead it returns 4. - -137: - (SB-DEBUG:BACKTRACE) output should start with something - including the name BACKTRACE, not (as in 0.pre7.88) - just "0: (\"hairy arg processor\" ...)". Until about - sbcl-0.pre7.109, the names in BACKTRACE were all screwed - up compared to the nice useful names in sbcl-0.6.13. - Around sbcl-0.pre7.109, they were mostly fixed by using - NAMED-LAMBDA to implement DEFUN. However, there are still - some screwups left, e.g. as of sbcl-0.pre7.109, there are - still some functions named "hairy arg processor" and - "SB-INT:&MORE processor". 141: Pretty-printing nested backquotes doesn't work right, as diff --git a/doc/intro.sgml b/doc/intro.sgml index 7c7fbcf..704532f 100644 --- a/doc/intro.sgml +++ b/doc/intro.sgml @@ -6,7 +6,7 @@ specific to &SBCL;, not on behavior which is common to all implementations of &ANSI; &CommonLisp;. -Where To Go For More Information on &CommonLisp; in General +Where To Go For More Information about &CommonLisp; in General Regardless of your ability level, two very useful resources for working with any implementation of @@ -50,7 +50,7 @@ but need to learn about Lisp, three books stand out. -Where To Go For More Information On &SBCL; +Where To Go For More Information About &SBCL; Before you read this user manual, you should probably read two other things. diff --git a/doc/sbcl.1 b/doc/sbcl.1 index 6844d40..f9d7b2e 100644 --- a/doc/sbcl.1 +++ b/doc/sbcl.1 @@ -70,8 +70,8 @@ after the MacLisp compiler, people will tell you that Lisp is an interpreted language. Ignore them.) SBCL aims for but has not yet reached compliance with the ANSI -standard for Common Lisp. More information on this is available in the -BUGS section below. +standard for Common Lisp. More information about this is available in +the BUGS section below. SBCL also includes various non-ANSI extensions. diff --git a/src/compiler/ir1tran.lisp b/src/compiler/ir1tran.lisp index a3dd4df..59cf711 100644 --- a/src/compiler/ir1tran.lisp +++ b/src/compiler/ir1tran.lisp @@ -1054,7 +1054,7 @@ ) ((functional-p var) (setf (leaf-ever-used var) t)) - ((lambda-var-specvar var) + ((and (lambda-var-specvar var) (eq (first spec) 'ignore)) ;; ANSI's definition for "Declaration IGNORE, IGNORABLE" ;; requires that this be a STYLE-WARNING, not a full WARNING. (compiler-style-warn "declaring special variable ~S to be ignored" diff --git a/src/runtime/runtime.c b/src/runtime/runtime.c index aa54b85..6c0d544 100644 --- a/src/runtime/runtime.c +++ b/src/runtime/runtime.c @@ -233,7 +233,7 @@ It is mostly in the public domain, but also includes some software copyrighted\n used under BSD-style licenses allowing copying only under certain conditions.\n\ See the COPYING file in the distribution for more information.\n\ \n\ -More information on SBCL is available at .\n\ +More information about SBCL is available at .\n\ "); fflush(stdout); } diff --git a/tests/clos.impure.lisp b/tests/clos.impure.lisp index 237e5ea..64089c6 100644 --- a/tests/clos.impure.lisp +++ b/tests/clos.impure.lisp @@ -181,6 +181,33 @@ (assert (= (a-accessor foo) 4)) (assert (= (c-accessor foo) 5))) +;;; At least as of sbcl-0.7.4, PCL has code to support a special +;;; encoding of effective method functions for slot accessors as +;;; FIXNUMs. Given this special casing, it'd be easy for slot accessor +;;; functions to get broken in special ways even though ordinary +;;; generic functions work. As of sbcl-0.7.4 we didn't have any tests +;;; for that possibility. Now we have a few tests: +(defclass fish () + ((fin :reader ffin :writer ffin!) + (tail :reader ftail :writer ftail!))) +(defvar *fish* (make-instance 'fish)) +(ffin! 'triangular-fin *fish*) +(defclass cod (fish) ()) +(defvar *cod* (make-instance 'cod)) +(defparameter *clos-dispatch-side-fx* (make-array 0 :fill-pointer 0)) +(defmethod ffin! (new-fin (cod cod)) + (format t "~&about to set ~S fin to ~S~%" cod new-fin) + (vector-push-extend '(cod) *clos-dispatch-side-fx*) + (prog1 + (call-next-method) + (format t "~&done setting ~S fin to ~S~%" cod new-fin))) +(defmethod ffin! :before (new-fin (cod cod)) + (vector-push-extend '(:before cod) *clos-dispatch-side-fx*) + (format t "~&exploring the CLOS dispatch zoo with COD fins~%")) +(ffin! 'almost-triang-fin *cod*) +(assert (eq (ffin *cod*) 'almost-triang-fin)) +(assert (equalp #((:before cod) (cod)) *clos-dispatch-side-fx*)) + ;;;; success (sb-ext:quit :unix-status 104) diff --git a/version.lisp-expr b/version.lisp-expr index cb7dde1..c41d1ba 100644 --- a/version.lisp-expr +++ b/version.lisp-expr @@ -18,4 +18,4 @@ ;;; for internal versions, especially for internal versions off the ;;; main CVS branch, it gets hairier, e.g. "0.pre7.14.flaky4.13".) -"0.7.4.28" +"0.7.4.29" -- 1.7.10.4