X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=src%2Fcode%2Fweak.lisp;h=e5300e106aab2185d8283e9e8b94e4507d5e1bdb;hb=d335afdcf50b641a0aafd32741e0777d4e12a59b;hp=8ce33679685985afecec15f4dba6b4059f94e6af;hpb=cea4896b2482b7b2b429c1631d774b4cfbc0efba;p=sbcl.git diff --git a/src/code/weak.lisp b/src/code/weak.lisp index 8ce3367..e5300e1 100644 --- a/src/code/weak.lisp +++ b/src/code/weak.lisp @@ -9,26 +9,29 @@ ;;;; provided with absolutely no warranty. See the COPYING and CREDITS ;;;; files for more information. -(in-package "SB!EXT") +(in-package "SB!IMPL") (defun make-weak-pointer (object) #!+sb-doc - "Allocates and returns a weak pointer which points to OBJECT." - (declare (values weak-pointer)) + "Allocate and return a weak pointer which points to OBJECT." (make-weak-pointer object)) #!-sb-fluid (declaim (inline weak-pointer-value)) (defun weak-pointer-value (weak-pointer) #!+sb-doc - "If WEAK-POINTER is valid, returns the value of WEAK-POINTER and T. - If the referent of WEAK-POINTER has been garbage collected, returns - the values NIL and NIL." - (declare (type weak-pointer weak-pointer) - (values t (member t nil))) - ;; We don't need to wrap this with a without-gcing, because once we have - ;; extracted the value, our reference to it will keep the weak pointer - ;; from becoming broken. We just have to make sure the compiler won't - ;; reorder these primitives. + "If WEAK-POINTER is valid, return the value of WEAK-POINTER and T. +If the referent of WEAK-POINTER has been garbage collected, +returns the values NIL and NIL." + (declare (type weak-pointer weak-pointer)) + ;; We don't need to wrap this with a WITHOUT-GCING, because once we + ;; have extracted the value, our reference to it will keep the weak + ;; pointer from becoming broken. We just have to make sure the + ;; compiler won't reorder these primitives. + ;; + ;; FIXME: Might it be a good idea to tweak the DEFKNOWNs for + ;; %WEAK-POINTER-VALUE and %WEAK-POINTER-BROKEN, so that the + ;; compiler will never try to reorder them even in code where we + ;; neglect to frame them in a LET? (let ((value (sb!c::%weak-pointer-value weak-pointer)) - (broken (sb!c::%weak-pointer-broken weak-pointer))) + (broken (sb!c::%weak-pointer-broken weak-pointer))) (values value (not broken))))