Index: /trunk/ccl/examples/bridge.lisp
===================================================================
--- /trunk/ccl/examples/bridge.lisp	(revision 451)
+++ /trunk/ccl/examples/bridge.lisp	(revision 452)
@@ -388,5 +388,8 @@
        (subseq typestring 1 =pos)))))
 
-(defun parse-foreign-struct-or-union-spec (typestring startpos record-class)
+(defun parse-foreign-struct-or-union-spec (typestring
+                                           startpos
+                                           record-class
+                                           from-pointer)
   (flet ((extract-record-name (startpos delimpos)
 	   (unless (and (= delimpos (1+ startpos))
@@ -429,5 +432,5 @@
 		     typestring
 		     (string-input-stream-index string-stream)
-		     nil)
+		     from-pointer)
 		  (fields `(,(if field-name-string (escape-foreign-name field-name-string))
 			    ,typespec))
@@ -470,5 +473,5 @@
 ;;; Parse the ivar's type string and return a FOREIGN-TYPE object.
 (defun objc-foreign-type-for-ivar
-    (str &optional (startpos 0) (allow-id-name t))
+    (str &optional (startpos 0) (allow-id-name t) from-pointer)
   (let* ((endpos (1+ startpos))
 	 (startchar (schar str startpos))
@@ -488,4 +491,5 @@
 	    (#\d :double-float)
 	    (#\v :void)
+            (#\B :<BOOL>)
 	    (#\@ (when allow-id-name
 		   (let* ((nextpos (1+ startpos)))
@@ -501,5 +505,5 @@
 	    (#\* '(:* :char))
 	    (#\^ (multiple-value-bind (type end)
-		     (objc-foreign-type-for-ivar str (1+ startpos) t)
+		     (objc-foreign-type-for-ivar str (1+ startpos) t t)
 		   (setq endpos end)
 		   `(:* ,type)))
@@ -521,5 +525,6 @@
 		  str (1+ startpos) (if (eq startchar #\{)
 				      :struct
-				      :union))
+				      :union)
+                  from-pointer)
 	       (setq endpos end)
 	       type))
