+(defbinding (gvalue-p "g_type_check_value") () boolean
+ (location pointer))
+
+(defmacro with-gvalue ((gvalue &optional type (value nil value-p)) &body body)
+ `(let ((,gvalue ,(cond
+ ((and type value-p) `(gvalue-new ,type ,value))
+ (type `(gvalue-new ,type))
+ (`(gvalue-new)))))
+ (unwind-protect
+ (progn
+ ,@body
+ ,(unless value-p `(gvalue-get ,gvalue)))
+ (gvalue-free ,gvalue))))