;;;; 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))))