<short summary of the patch>
authorCamm Maguire <camm@debian.org>
Thu, 11 Aug 2022 17:16:42 +0000 (18:16 +0100)
committerCamm Maguire <camm@debian.org>
Thu, 11 Aug 2022 17:16:42 +0000 (18:16 +0100)
TODO: Put a short summary on the line above and replace this paragraph
with a longer explanation of this change. Complete the meta-information
with other relevant fields (see below for details). To make it easier, the
information below has been extracted from the changelog. Adjust it or drop
it.

gcl (2.6.12-15) unstable; urgency=medium

  * Version_2_6_13pre18

Gbp-Pq: Name Version_2_6_13pre19

lsp/gcl_iolib.lsp
o/file.d

index 7e9a8eb968461e8b8eb00b5684f579911d205d59..9f65bdf790474ed14c376ad678923a9c0ae309df 100755 (executable)
 
 
 (defmacro with-input-from-string ((var string &key index start end) . body)
-  (multiple-value-bind (ds b)
-      (find-declarations body)
-    `(let ((,var (make-string-input-stream ,string ,start ,end)))
-       ,@ds
-       (unwind-protect
-          (progn ,@b)
-        (when ,index (setf ,index (si:get-string-input-stream-index ,var)))
-        (when ,var (close ,var))))))
-
+  (let ((x (sgen "X")))
+    (multiple-value-bind (ds b)
+       (find-declarations body)
+      `(let ((,var (make-string-input-stream ,string ,start ,end)))
+        ,@ds
+        (unwind-protect
+            ,(let ((f `(progn ,@b)))
+               (if index
+                   `(let ((,x (multiple-value-list ,f))) (setf ,index (get-string-input-stream-index ,var)) (values-list ,x))
+                 f))
+        (close ,var))))))
+  
 (defmacro with-output-to-string ((var &optional string &key element-type) . body)
-  (multiple-value-bind (ds b)
-      (find-declarations body)
-    `(let ((,var ,(if string `(make-string-output-stream-from-string ,string) `(make-string-output-stream))))
-       ,@ds
-       (unwind-protect
-          (progn ,@b ,@(unless string `((get-output-stream-string ,var))))
-        (when ,var (close ,var))))))
+  (let ((s (sgen "STRING"))(bl (sgen "BLOCK"))(e (sgen "ELEMENT-TYPE"))(x (sgen "X")))
+    (multiple-value-bind (ds b)
+       (find-declarations body)
+      `(let* ((,s ,string)(,e ,element-type)
+             (,var (if ,s (make-string-output-stream-from-string ,s) (make-string-output-stream :element-type ,e))))
+        ,@ds
+        (unwind-protect
+            (let ((,x (multiple-value-list (progn ,@b)))) (if ,s (values-list ,x) (get-output-stream-string ,var)))
+          (close ,var))))))
 
 
 (defun read-from-string (string
index 3d810e52b5e7dc800df556c7455cc4e3f16bb3be..e54ec6c89e1fe9af3dad6dcc3d96bb0697142612 100755 (executable)
--- a/o/file.d
+++ b/o/file.d
@@ -1668,12 +1668,11 @@ for the string ~S.",
                3, istart, iend, strng);
 @)
 
-static void
-FFN(Lmake_string_output_stream)()
-{
-       check_arg(0);
-       vs_push(make_string_output_stream(64));
-}
+@(static defun make_string_output_stream (&k element_type)
+@
+        element_type=Cnil;/*FIXME*/
+        @(return `make_string_output_stream(64)`)
+@)
 
 LFD(Lget_output_stream_string)()
 {