chiark / gitweb /
Bug fix
authorespen <espen>
Sun, 24 Apr 2005 13:24:41 +0000 (13:24 +0000)
committerespen <espen>
Sun, 24 Apr 2005 13:24:41 +0000 (13:24 +0000)
glib/genums.lisp
glib/glib.lisp

index 783bde7cd4b5cd2e8fd0eadca8cd959a57c21f07..fe563b56c3095ac8380e401033b0dc4e38820280 100644 (file)
@@ -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: genums.lisp,v 1.13 2005/04/23 16:48:50 espen Exp $
+;; $Id: genums.lisp,v 1.14 2005/04/24 13:24:41 espen Exp $
 
 (in-package "GLIB")
   
@@ -171,12 +171,12 @@ (defmethod to-alien-form (flags (type (eql 'flags)) &rest args)
               (t (error 'type-error :datum ,flags 
                   :expected-type '(,type ,@args)))))))
 
-(defmethod from-alien-form (int (type (eql 'flags)) &rest args)
+(defmethod from-alien-form (value (type (eql 'flags)) &rest args)
   (declare (ignore type))
   `(loop
-    for mapping in ',(%map-flags args :int-symbol)
-    unless (zerop (logand ,int (first mapping)))
-    collect (second mapping)))
+    for (int symbol)  in ',(%map-flags args :int-symbol)
+    when (= (logand ,value int) int)
+    collect symbol))
 
 (defmethod to-alien-function ((type (eql 'flags)) &rest args)
   (declare (ignore type))
@@ -192,11 +192,11 @@ (defmethod to-alien-function ((type (eql 'flags)) &rest args)
 (defmethod from-alien-function ((type (eql 'flags)) &rest args)
   (declare (ignore type))
   (let ((mappings (%map-flags args :int-symbol)))
-    #'(lambda (int)
+    #'(lambda (value)
        (loop
-        for mapping in mappings
-        unless (zerop (logand int (first mapping)))
-        collect (second mapping)))))
+        for (int symbol) in mappings
+        when (= (logand value int) int)
+        collect symbol))))
 
 (defmethod writer-function ((type (eql 'flags)) &rest args)
   (declare (ignore type))
@@ -236,9 +236,9 @@        (defun ,flags-int (flags)
                         :expected-type ',name))))))
        (defun ,int-flags (value)
         (loop
-         for mapping in ',(%map-flags args :int-symbol)
-         unless (zerop (logand value (first mapping)))
-         collect (second mapping)))
+         for (int symbol) in ',(%map-flags args :int-symbol)
+         when(= (logand value int) int)
+         collect symbol))
        (defmethod alien-type ((type (eql ',name)) &rest args)
         (declare (ignore type args))
         (alien-type 'flags))
index 6bd2dff92aafec829722d65e35919b9b61a1584b..01bd66f1e4fa1c8fc9db49af29b9419f2f7aaf28 100644 (file)
@@ -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: glib.lisp,v 1.30 2005/04/23 16:48:50 espen Exp $
+;; $Id: glib.lisp,v 1.31 2005/04/24 13:27:20 espen Exp $
 
 
 (in-package "GLIB")
@@ -447,7 +447,7 @@ (defmethod copy-from-alien-form (c-vector (type (eql 'vector)) &rest args)
   (destructuring-bind (element-type &optional (length '*)) args
     (if (eq length '*)
        (error "Can't use vector of variable size as return type")
-      `(map-c-vector 'vector #'identity ,c-vector ',element-type ',length))))
+      `(map-c-vector 'vector #'identity ,c-vector ',element-type ,length))))
 
 (defmethod copy-from-alien-function ((type (eql 'vector)) &rest args)
   (declare (ignore type))