All r6rs ports are both textual and binary
authorAndy Wingo <wingo@pobox.com>
Tue, 15 Jan 2013 15:28:22 +0000 (16:28 +0100)
committerAndy Wingo <wingo@pobox.com>
Tue, 15 Jan 2013 15:32:52 +0000 (16:32 +0100)
* module/rnrs/io/ports.scm (binary-port?): All ports are binary _and_
  textual.  Bytevectors and strings may be written to or read from
  either.
  (port-transcoder): All textual ports (all ports) have transcoders of
  some sort.

* test-suite/tests/r6rs-ports.test ("8.2.6  Input and output ports"):
  Remove test that binary ports don't have transcoders, because binary
  ports are also textual.

module/rnrs/io/ports.scm
test-suite/tests/r6rs-ports.test

index 7c17b0c..8e04f5d 100644 (file)
 (define (port-transcoder port)
   "Return the transcoder object associated with @var{port}, or @code{#f}
 if the port has no transcoder."
-  (cond ((port-encoding port)
-         => (lambda (encoding)
-              (make-transcoder
-               encoding
-               (native-eol-style)
-               (case (port-conversion-strategy port)
-                 ((error) 'raise)
-                 ((substitute) 'replace)
-                 (else
-                  (assertion-violation 'port-transcoder
-                                       "unsupported error handling mode"))))))
-        (else
-         #f)))
+  (and (textual-port? port)
+       ;; All textual ports have transcoders.
+       (make-transcoder
+        (port-encoding port)
+        (native-eol-style)
+        (case (port-conversion-strategy port)
+          ((error) 'raise)
+          ((substitute) 'replace)
+          (else
+           (assertion-violation 'port-transcoder
+                                "unsupported error handling mode"))))))
 
 (define (binary-port? port)
-  "Returns @code{#t} if @var{port} does not have an associated encoding,
-@code{#f} otherwise."
-  (not (port-encoding port)))
+  "Always returns @code{#t}, as all ports can be used for binary I/O in
+Guile."
+  (equal? (port-encoding port) "ISO-8859-1"))
 
 (define (textual-port? port)
   "Always returns @code{#t}, as all ports can be used for textual I/O in
index ed49598..3e36cca 100644 (file)
           (put-string tp "The letter λ cannot be represented in Latin-1.")
           #f))))
 
-  (pass-if "port-transcoder [binary port]"
-    (not (port-transcoder (open-bytevector-input-port #vu8()))))
-
   (pass-if "port-transcoder [transcoded port]"
     (let* ((p (transcoded-port (open-bytevector-input-port (string->utf8 "foo"))
                                (make-transcoder (utf-8-codec))))