Made (release nil) no-op instead of error. Added shorthand for using
authorDmitry Kalyanov <Kalyanov.Dmitry@gmail.com>
Wed, 25 Feb 2009 22:37:53 +0000 (01:37 +0300)
committerDmitry Kalyanov <Kalyanov.Dmitry@gmail.com>
Wed, 25 Feb 2009 22:37:53 +0000 (01:37 +0300)
glib/gobject.foreign.lisp

index 79d010f..ce6d42f 100644 (file)
@@ -2,13 +2,15 @@
 
 (defgeneric release (object))
 
+(defmethod release ((object null)))
+
 (defun release* (&rest objects)
   (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 +18,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)