summaryrefslogtreecommitdiff
path: root/module/rnrs
diff options
context:
space:
mode:
authorLudovic Courtès <ludo@gnu.org>2010-11-24 23:01:50 +0100
committerLudovic Courtès <ludo@gnu.org>2010-11-24 23:04:24 +0100
commitd4b8163784c4764b5b5ecd3c5ac3892cc5b46e64 (patch)
treebd6cc15d5cbedafc50d90e32169b6b7cfee2e850 /module/rnrs
parent1044537dff91146ed17f13cfa8d1eca5f92f4307 (diff)
downloadguile-d4b8163784c4764b5b5ecd3c5ac3892cc5b46e64.tar.gz
Honor R6RS transcoder error handling modes, when possible.
* module/rnrs/io/ports.scm (transcoded-port): Change RESULT's conversion strategy based on TRANSCODER's error-handling mode. * test-suite/tests/r6rs-ports.test ("8.2.6 Input and output ports")["transcoded-port [error handling mode = raise]", "transcoded-port [error handling mode = replace]"]: New tests.
Diffstat (limited to 'module/rnrs')
-rw-r--r--module/rnrs/io/ports.scm8
1 files changed, 8 insertions, 0 deletions
diff --git a/module/rnrs/io/ports.scm b/module/rnrs/io/ports.scm
index 73271add8..854ea0919 100644
--- a/module/rnrs/io/ports.scm
+++ b/module/rnrs/io/ports.scm
@@ -197,6 +197,14 @@
read from its underlying binary port @var{port}."
(let ((result (%make-transcoded-port port)))
(set-port-encoding! result (transcoder-codec transcoder))
+ (case (transcoder-error-handling-mode transcoder)
+ ((raise)
+ (set-port-conversion-strategy! result 'error))
+ ((replace)
+ (set-port-conversion-strategy! result 'substitute))
+ (else
+ (error "unsupported error handling mode"
+ (transcoder-error-handling-mode transcoder))))
result))
(define (port-position port)