From 72adccb19ec2bdcc5ebaa7b9d2c583a0dc1dc4e8 Mon Sep 17 00:00:00 2001 From: gerd <gerd> Date: Wed, 18 Jun 2003 14:29:24 +0000 Subject: [PATCH] Add (SETF WEAK-POINTER-VALUE). From Paul Foley on cmucl-imp, 2003-06-17. * src/compiler/generic/objdef.lisp (weak-pointer): Add setters for value and broken. * src/code/weak.lisp (setf weak-pointer-value) (c::%set-weak-pointer-value, c::%set-weak-pointer-value): New functions. --- code/weak.lisp | 18 ++++++++++++++++-- compiler/generic/objdef.lisp | 4 +++- general-info/release-19a.txt | 4 +++- 3 files changed, 22 insertions(+), 4 deletions(-) diff --git a/code/weak.lisp b/code/weak.lisp index fe910ce84..7d4ed8c50 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 508bb8745..1f0fa9ca7 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 c66afe666..03cd3c084 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' -- GitLab