Index: /trunk/ccl/examples/objc-runtime.lisp
===================================================================
--- /trunk/ccl/examples/objc-runtime.lisp	(revision 769)
+++ /trunk/ccl/examples/objc-runtime.lisp	(revision 770)
@@ -1386,5 +1386,6 @@
 	 (selector nil)
 	 (argspecs nil)
-	 (resulttype nil))
+	 (resulttype nil)
+         (struct-return nil))
     (flet ((bad-selector (why) (error "Can't parse method selector ~s : ~a"
 				   selector-arg why)))
@@ -1450,4 +1451,5 @@
 	  (progn
 	    (push name argspecs)
+            (setq struct-return t)
 	    (push :address argspecs)
 	    (setq resulttype :void))
@@ -1463,5 +1465,6 @@
 				     `(:id :<sel> ,@(nreverse argtypes))
 				     resulttype))
-		(push (car argspecs) argtypes))))))
+		(push (car argspecs) argtypes))
+              struct-return))))
 
 (defun objc-method-definition-form (class-p selector-arg class-arg body env)
@@ -1471,5 +1474,6 @@
 			argspecs
 			body
-			typestring)
+			typestring
+                        struct-return)
       (parse-objc-method selector-arg class-arg body)
       (multiple-value-bind (body decls) (parse-body body env)
@@ -1483,6 +1487,10 @@
 	       (self (intern "SELF"))
 	       (_cmd (intern "_CMD"))
-	       (super (gensym "SUPER")) 
-	       (params `(:id ,self :<sel> ,_cmd ,@argspecs)))
+	       (super (gensym "SUPER"))
+	       (params `(:id ,self :<sel> ,_cmd)))
+          (when struct-return
+            (setq params `(,(car argspecs) ,(cadr argspecs) ,@params))
+            (setq argspecs (cddr argspecs)))
+          (setq params (nconc params argspecs))
 	  `(progn
 	    (defcallback ,impname
