X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~mdw/git/clg/blobdiff_plain/108440245169dfcb7e4a71c0fb19ce8a64a110e4..c0e198829957eb9122532707013fb324f4ef1d14:/glib/proxy.lisp diff --git a/glib/proxy.lisp b/glib/proxy.lisp index 44f2577..53d35ba 100644 --- a/glib/proxy.lisp +++ b/glib/proxy.lisp @@ -20,7 +20,7 @@ ;; TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE ;; SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -;; $Id: proxy.lisp,v 1.30 2006-02-08 21:43:33 espen Exp $ +;; $Id: proxy.lisp,v 1.31 2006-02-08 22:10:47 espen Exp $ (in-package "GLIB") @@ -292,7 +292,7 @@ (defun list-invalidated-instances () ;; TODO: add a ref-counted-proxy subclass (defclass proxy () - ((location :allocation :special :reader foreign-location :type pointer)) + ((location :allocation :special :type pointer)) (:metaclass virtual-slots-class)) (defgeneric instance-finalizer (object)) @@ -300,6 +300,15 @@ (defgeneric reference-foreign (class location)) (defgeneric unreference-foreign (class location)) (defgeneric invalidate-instance (object)) +(defun foreign-location (instance) + (slot-value instance 'location)) + +(defun (setf foreign-location) (location instance) + (setf (slot-value instance 'location) location)) + +(defun proxy-valid-p (instance) + (slot-boundp instance 'location)) + (defmethod reference-foreign ((name symbol) location) (reference-foreign (find-class name) location)) @@ -553,7 +562,7 @@ (defmethod make-proxy-instance ((class proxy-class) location &key weak) (or (find-invalidated-instance class) (allocate-instance class)))) - (setf (slot-value instance 'location) location) + (setf (foreign-location instance) location) (unless weak (finalize instance (instance-finalizer instance))) instance))