Typo.
[cl-gtk2.git] / glib / gobject.foreign.lisp
index 79d010f..65e08b8 100644 (file)
@@ -1,14 +1,22 @@
 (in-package :gobject)
 
-(defgeneric release (object))
+(defgeneric release (object)
+  (:documentation "Manually frees the Lisp reference to the @code{object}. Probably should not be called.
+
+@arg[object]{an instance of @class{g-object}}"))
+
+(defmethod release ((object null)))
 
 (defun release* (&rest objects)
+  "Calls @fun{release} on all objects in @code{objects}
+
+@arg[objects]{a list of instances of @class{g-object}}"
   (declare (dynamic-extent objects))
   (loop
      for object in objects
      do (release object)))
 
-(defmacro using ((var expr) &body body)
+(defmacro using ((var &optional (expr var)) &body body)
   `(let ((,var ,expr))
      (unwind-protect
           (progn ,@body)
@@ -16,7 +24,7 @@
 
 (defun using-expand (bindings body)
   (if bindings
-      (destructuring-bind (var expr) (first bindings)
+      (destructuring-bind (var &optional (expr var)) (ensure-list (first bindings))
        `(let ((,var ,expr))
           (unwind-protect
                ,(using-expand (rest bindings) body)
 
 (defmacro using* ((&rest bindings) &body body)
   (using-expand bindings body))
-
-(defvar *registered-stable-pointers* (make-array 0 :adjustable t :fill-pointer t))
-
-(defun allocate-stable-pointer (thing)
-  (let ((id (find-fresh-id)))
-    (setf (aref *registered-stable-pointers* id) thing)
-    (make-pointer id)))
-
-(defun free-stable-pointer (stable-pointer)
-  (setf (aref *registered-stable-pointers* (pointer-address stable-pointer)) nil))
-
-(defun get-stable-pointer-value (stable-pointer)
-  (aref *registered-stable-pointers* (pointer-address stable-pointer)))
-
-(defun find-fresh-id ()
-  (or (position nil *registered-stable-pointers*)
-      (progn (vector-push-extend nil *registered-stable-pointers*)
-             (1- (length *registered-stable-pointers*)))))
-
-(defmacro with-stable-pointer ((ptr expr) &body body)
-  `(let ((,ptr (allocate-stable-pointer ,expr)))
-     (unwind-protect
-          (progn ,@body)
-       (free-stable-pointer ,ptr))))
\ No newline at end of file