From: Nikodemus S. <nik...@ra...> - 2011-02-13 20:34:28
|
1.0.45.32: export SB-PCL:+SLOT-UNBOUND+ Using STANDARD-INSTANCE-ACCESS with this provided is much nicer -- no need to muck around with SLOT-BOUNDP-USING-CLASS and such. Also add quick SIA tests and some dependant update abuse to tests. lp#718039 Index: NEWS =================================================================== RCS file: /cvsroot/sbcl/sbcl/NEWS,v retrieving revision 1.1869 diff -u -r1.1869 NEWS --- NEWS 13 Feb 2011 20:29:21 -0000 1.1869 +++ NEWS 13 Feb 2011 20:32:28 -0000 @@ -5,6 +5,9 @@ arguments (lp#710017) * enhancement: forward referenced functions no longer cause STYLE-WARNINGS when running under --script. (lp#677779) + * enhancement: SB-PCL:+SLOT-UNBOUND+ is exported, making it possible to + distinguish unbound instance slots when using STANDARD-INSTANCE-ACCESS + &co. (lp#718039) * optimization: ERROR and CERROR are approximately 5 times faster. * optimization: optimized constructors are used for MAKE-INSTANCE of classes with applicable non-standard (SETF SLOT-VALUE-USING-CLASS), Index: package-data-list.lisp-expr =================================================================== RCS file: /cvsroot/sbcl/sbcl/package-data-list.lisp-expr,v retrieving revision 1.546 diff -u -r1.546 package-data-list.lisp-expr --- package-data-list.lisp-expr 18 Nov 2010 11:28:46 -0000 1.546 +++ package-data-list.lisp-expr 13 Feb 2011 20:32:29 -0000 @@ -2100,7 +2100,8 @@ ;; experimental SBCL-only (for now) symbols :export ("MAKE-METHOD-SPECIALIZERS-FORM" "PARSE-SPECIALIZER-USING-CLASS" - "UNPARSE-SPECIALIZER-USING-CLASS") + "UNPARSE-SPECIALIZER-USING-CLASS" + "+SLOT-UNBOUND+") ;; FIXME: After a little while, these reexports can probably go ;; away, as they're superseded by the use of SB-MOP as the ;; publically-accessible package. Index: version.lisp-expr =================================================================== RCS file: /cvsroot/sbcl/sbcl/version.lisp-expr,v retrieving revision 1.5179 diff -u -r1.5179 version.lisp-expr --- version.lisp-expr 13 Feb 2011 20:29:22 -0000 1.5179 +++ version.lisp-expr 13 Feb 2011 20:32:29 -0000 @@ -20,4 +20,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".) -"1.0.45.31" +"1.0.45.32" Index: doc/manual/beyond-ansi.texinfo =================================================================== RCS file: /cvsroot/sbcl/sbcl/doc/manual/beyond-ansi.texinfo,v retrieving revision 1.42 diff -u -r1.42 beyond-ansi.texinfo --- doc/manual/beyond-ansi.texinfo 15 Oct 2010 10:16:48 -0000 1.42 +++ doc/manual/beyond-ansi.texinfo 13 Feb 2011 20:32:29 -0000 @@ -69,6 +69,8 @@ @comment node-name, next, previous, up @section Metaobject Protocol +@subsection AMOP Compatibility of Metaobject Protocol + SBCL supports a metaobject protocol which is intended to be compatible with AMOP; present exceptions to this (as distinct from current bugs) are: @@ -217,6 +219,8 @@ @end itemize +@subsection Metaobject Protocol Extensions + In addition, SBCL supports extensions to the Metaobject protocol from AMOP; at present, they are: @@ -256,6 +260,15 @@ between classes and proper names and between lists of the form @code{(eql @var{x})} and interned eql specializer objects. +@item +@vindex @sbpcl{+slot-unbound+} +@findex @sbmop{standard-instance-access} +@findex @sbmop{funcallable-standard-instance-access} +distinguising unbound instance allocated slots from bound ones when +using @code{standard-instance-access} and +@code{funcallable-standard-instance-access} is possible by comparison +to the constant @code{+slot-unbound+}. + @end itemize @node Support For Unix Index: src/pcl/low.lisp =================================================================== RCS file: /cvsroot/sbcl/sbcl/src/pcl/low.lisp,v retrieving revision 1.53 diff -u -r1.53 low.lisp --- src/pcl/low.lisp 15 Sep 2009 11:07:39 -0000 1.53 +++ src/pcl/low.lisp 13 Feb 2011 20:32:29 -0000 @@ -173,17 +173,20 @@ ;;; this an interned symbol. That means that the fast check to see ;;; whether a slot is unbound is to say (EQ <val> '..SLOT-UNBOUND..). ;;; That is considerably faster than looking at the value of a special -;;; variable. Be careful, there are places in the code which actually -;;; use ..SLOT-UNBOUND.. rather than this variable. So much for -;;; modularity.. +;;; variable. ;;; -;;; FIXME: Now that we're tightly integrated into SBCL, we could use -;;; the SBCL built-in unbound value token instead. Perhaps if we did -;;; so it would be a good idea to define collections of CLOS slots as -;;; a new type of heap object, instead of using bare SIMPLE-VECTOR, in -;;; order to avoid problems (in the debugger if nowhere else) with -;;; SIMPLE-VECTORs some of whose elements are unbound tokens. -(defconstant +slot-unbound+ '..slot-unbound..) +;;; It seems only reasonable to also export this for users, since +;;; otherwise dealing with STANDARD-INSTANCE-ACCESS becomes harder +;;; -- and slower -- than it needs to be. +(defconstant +slot-unbound+ '..slot-unbound.. + "SBCL specific extentions to MOP: if this value is read from an +instance using STANDARD-INSTANCE-ACCESS, the slot is unbound. +Similarly, an :INSTANCE allocated slot can be made unbound by +assigning this to it using (SETF STANDARD-INSTANCE-ACCESS). + +Value of +SLOT-UNBOUND+ is unspecified, and should not be relied to be +of any particular type, but it is guaranteed to be suitable for EQ +comparison.") (defmacro %allocate-static-slot-storage--class (no-of-slots) `(make-array ,no-of-slots :initial-element +slot-unbound+)) ...plus new file tests/mop-30.impure.lisp. |