X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;ds=sidebyside;f=src%2Fcode%2Fmacros.lisp;h=0b23bacb7b2f13013baa2684dc2381c8ff0e14ba;hb=69d60b456b07a0256f08df0d02484f361ce5737c;hp=45bc48a44c64fd317233e4fdb32cff1df162e974;hpb=bea5b384106a6734a4b280a76e8ebdd4d51b5323;p=sbcl.git diff --git a/src/code/macros.lisp b/src/code/macros.lisp index 45bc48a..0b23bac 100644 --- a/src/code/macros.lisp +++ b/src/code/macros.lisp @@ -382,11 +382,17 @@ (multiple-value-bind (forms decls) (parse-body forms-decls :doc-string-allowed nil) (if string - `(let ((,var (make-fill-pointer-output-stream ,string))) - ,@decls - (unwind-protect - (progn ,@forms) - (close ,var))) + (let ((element-type-var (gensym))) + `(let ((,var (make-fill-pointer-output-stream ,string)) + ;; ELEMENT-TYPE isn't currently used for anything + ;; (see FILL-POINTER-OUTPUT-STREAM FIXME in stream.lisp), + ;; but it still has to be evaluated for side-effects. + (,element-type-var ,element-type)) + (declare (ignore ,element-type-var)) + ,@decls + (unwind-protect + (progn ,@forms) + (close ,var)))) `(let ((,var (make-string-output-stream :element-type ,element-type))) ,@decls (unwind-protect