diff --git a/code/weak.lisp b/code/weak.lisp index fe910ce848e53b88ccf5d59fa1e386f83d9d7f92..7d4ed8c504a24b2f4621e5359acaf824b25a2379 100644 --- a/code/weak.lisp +++ b/code/weak.lisp @@ -5,11 +5,11 @@ ;;; Carnegie Mellon University, and has been placed in the public domain. ;;; (ext:file-comment - "$Header: /Volumes/share2/src/cmucl/cvs2git/cvsroot/src/code/weak.lisp,v 1.5 1999/03/17 19:30:14 pw Exp $") + "$Header: /Volumes/share2/src/cmucl/cvs2git/cvsroot/src/code/weak.lisp,v 1.6 2003/06/18 14:29:24 gerd Rel $") ;;; ;;; ********************************************************************** ;;; -;;; $Header: /Volumes/share2/src/cmucl/cvs2git/cvsroot/src/code/weak.lisp,v 1.5 1999/03/17 19:30:14 pw Exp $ +;;; $Header: /Volumes/share2/src/cmucl/cvs2git/cvsroot/src/code/weak.lisp,v 1.6 2003/06/18 14:29:24 gerd Rel $ ;;; ;;; Weak Pointer Support. ;;; @@ -40,6 +40,13 @@ (broken (c::%weak-pointer-broken weak-pointer))) (values value (not broken)))) +(declaim (inline (setf weak-pointer-value))) +(defun (setf weak-pointer-value) (object weak-pointer) + "Updates WEAK-POINTER to point to a new object." + (declare (type weak-pointer weak-pointer)) + (c::%set-weak-pointer-broken weak-pointer nil) + (c::%set-weak-pointer-value weak-pointer object)) + ;;; For the interpreter.. (defun c::%weak-pointer-value (w) @@ -50,3 +57,10 @@ (declare (type weak-pointer w)) (c::%weak-pointer-broken w)) +(defun c::%set-weak-pointer-value (w v) + (declare (type weak-pointer w)) + (c::%set-weak-pointer-value w v)) + +(defun c::%set-weak-pointer-broken (w v) + (declare (type weak-pointer w) (type boolean v)) + (c::%set-weak-pointer-broken w v)) diff --git a/compiler/generic/objdef.lisp b/compiler/generic/objdef.lisp index 508bb8745280d8e3630e649c206ffc56c483efb8..1f0fa9ca70638a8497b22b491caa8591cffb67d3 100644 --- a/compiler/generic/objdef.lisp +++ b/compiler/generic/objdef.lisp @@ -5,7 +5,7 @@ ;;; Carnegie Mellon University, and has been placed in the public domain. ;;; (ext:file-comment - "$Header: /Volumes/share2/src/cmucl/cvs2git/cvsroot/src/compiler/generic/objdef.lisp,v 1.48 2003/06/18 09:23:10 gerd Exp $") + "$Header: /Volumes/share2/src/cmucl/cvs2git/cvsroot/src/compiler/generic/objdef.lisp,v 1.49 2003/06/18 14:29:23 gerd Exp $") ;;; ;;; ********************************************************************** ;;; @@ -379,9 +379,11 @@ :header weak-pointer-type :alloc-trans make-weak-pointer) (value :ref-trans c::%weak-pointer-value :ref-known (flushable) + :set-trans c::%set-weak-pointer-value :set-known (unsafe) :init :arg) (broken :type (member t nil) :ref-trans c::%weak-pointer-broken :ref-known (flushable) + :set-trans c::%set-weak-pointer-broken :set-known (unsafe) :init :null) (next :c-type #-alpha "struct weak_pointer *" #+alpha "u32")) diff --git a/general-info/release-19a.txt b/general-info/release-19a.txt index c66afe6664433097458f6643f04c61ae6d44d740..03cd3c0843c9756512003f262990d6a5bdc9356d 100644 --- a/general-info/release-19a.txt +++ b/general-info/release-19a.txt @@ -56,7 +56,9 @@ New in this release: - UNIX:UNIX-LSEEK working with files > 2G on BSDs. - Type declarations on local bindings of special variables no longer being ignored. - - DISASSEMBLE disassembling closure/funcallable instance functions. + - DISASSEMBLE disassembling closure/funcallable instance + functions. + - (SETF EXT:WEAK-POINTER-VALUE) has been added. * Numerous ANSI compliance fixes: - Many bugs in CMUCL's type system detected by Paul Dietz'