[Git][cmucl/cmucl][issue-140-stream-element-type-two-way-stream] Throw error if the stream is not a file stream.

Raymond Toy (@rtoy) gitlab at common-lisp.net
Mon Oct 17 16:46:59 UTC 2022



Raymond Toy pushed to branch issue-140-stream-element-type-two-way-stream at cmucl / cmucl


Commits:
08f76fc3 by Raymond Toy at 2022-10-17T09:46:45-07:00
Throw error if the stream is not a file stream.

Update test to verify that a type error is thrown.

- - - - -


2 changed files:

- src/code/stream.lisp
- tests/issues.lisp


Changes:

=====================================
src/code/stream.lisp
=====================================
@@ -291,23 +291,12 @@
     ;; simple-stream
     (stream::%stream-external-format stream)
     ;; lisp-stream
-    (typecase stream
+    ;; The stream is a file stream; signal an error if it's not.
+    (etypecase stream
       #+unicode
       (fd-stream (fd-stream-external-format stream))
       (synonym-stream (stream-external-format
-		       (symbol-value (synonym-stream-symbol stream))))
-      (two-way-stream
-       (let ((input-format
-	       (stream-external-format (two-way-stream-input-stream stream)))
-	     (output-format
-	       (stream-external-format (two-way-stream-output-stream stream))))
-	 ;; If the input and output streams have the same format, we
-	 ;; can return the format.  If they differ, it's not clear
-	 ;; what to do, so just return :default.
-	 (if (eql input-format output-format)
-	     input-format
-	     :default)))
-      (t :default))
+		       (symbol-value (synonym-stream-symbol stream)))))
     ;; fundamental-stream
     :default))
 


=====================================
tests/issues.lisp
=====================================
@@ -672,12 +672,7 @@
 
 (define-test issue.140
     (:tag :issues)
-  ;; Make sure *standard-input* is a two-way-stream
-  (assert-true (typep *standard-input* 'two-way-stream))
-  (let ((input-format (stream-external-format
-		       (two-way-stream-input-stream *standard-input*)))
-	(output-format (stream-external-format
-			(two-way-stream-output-stream *standard-input*))))
-    ;; By default, the input and output formats should be the same.
-    (assert-eql input-format output-format)
-    (assert-eql input-format (stream-external-format *standard-input*))))
+  (with-output-to-string (out)
+    (with-input-from-string (in "abc")
+      (let ((two-way-stream (make-two-way-stream in out)))
+	(assert-error 'type-error (stream-external-format two-way-stream))))))



View it on GitLab: https://gitlab.common-lisp.net/cmucl/cmucl/-/commit/08f76fc37691ab430bb4561f46d47ccfb92cdee8

-- 
View it on GitLab: https://gitlab.common-lisp.net/cmucl/cmucl/-/commit/08f76fc37691ab430bb4561f46d47ccfb92cdee8
You're receiving this email because of your account on gitlab.common-lisp.net.


-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://mailman.common-lisp.net/pipermail/cmucl-cvs/attachments/20221017/c62bda51/attachment-0001.html>


More information about the cmucl-cvs mailing list