Index: /trunk/ccl/lib/macros.lisp
===================================================================
--- /trunk/ccl/lib/macros.lisp	(revision 5603)
+++ /trunk/ccl/lib/macros.lisp	(revision 5604)
@@ -870,5 +870,5 @@
         (if (eq construct 'etypecase)
             (push `(t (values (%err-disp #.$XWRONGTYPE ,key-var ',types))) body)
-            (push `(t (setf ,keyform (ensure-value-of-type ,key-var ',types ',keyform))
+            (push `(t (setf ,key-var (ensure-value-of-type  ,key-var ',types ',keyform))
                       (go ,e-c-p)) body))))
     `(cond ,@(nreverse body))))
@@ -899,6 +899,6 @@
         (tag (gensym)))
     `(prog (,key-var)
+       (setq ,key-var ,keyform)
        ,tag
-       (setq ,key-var ,keyform)
        (return ,(typecase-aux key-var clauses tag keyform)))))
 
@@ -1381,5 +1381,9 @@
       `(let* ((,string-var ,string)
               (,var (if ,string-var
-                        (%make-string-output-stream ,string-var)
+                      ,@(if element-type-p
+                            `((progn
+                                ,element-type
+                                (%make-string-output-stream ,string-var)))
+                            `((%make-string-output-stream ,string-var)))
                       ,@(if element-type-p
                             `((make-string-output-stream :element-type ,element-type))
