Index: /trunk/ccl/lib/macros.lisp
===================================================================
--- /trunk/ccl/lib/macros.lisp	(revision 5973)
+++ /trunk/ccl/lib/macros.lisp	(revision 5974)
@@ -1322,20 +1322,25 @@
    body)
 
-(defmacro with-macptrs (varlist &rest body &aux decls inits)
-  (dolist (var varlist)
-    (if (consp var)
-      (progn
-        (push (car var) decls)
-        (push (list (%car var)
-                    (if (%cdr var)
-                      `(%setf-macptr (%null-ptr) ,@(%cdr var))
-                      '(%null-ptr))) inits))
-      (progn
-        (push var decls)
-        (push (list var '(%null-ptr)) inits))))
-  `(let* ,(nreverse inits)
-     (declare (dynamic-extent ,@decls))
-     (declare (type macptr ,@decls))
-     ,@body))
+(defmacro with-macptrs (varlist &rest body &environment env)
+  (multiple-value-bind (body other-decls) (parse-body body env)
+    (collect ((bindings)
+              (our-decls)
+              (inits))
+      (dolist (var varlist)
+        (if (consp var)
+          (progn
+            (our-decls (car var))
+            (bindings `(,(car var) (%null-ptr)))
+            (if (cdr var)
+              (inits `(%setf-macptr ,(car var) ,@(cdr var)))))
+          (progn
+            (our-decls var)
+            (bindings `(,var (%null-ptr))))))
+  `(let* ,(bindings)
+     (declare (dynamic-extent ,@(our-decls))
+     (declare (type macptr ,@(our-decls)))
+     ,@other-decls)
+    ,@(inits)
+     ,@body))))
 
 (defmacro with-loading-file (filename &rest body)
