diff options
author | Ludovic Courtès <ludo@gnu.org> | 2010-11-24 23:01:50 +0100 |
---|---|---|
committer | Ludovic Courtès <ludo@gnu.org> | 2010-11-24 23:04:24 +0100 |
commit | d4b8163784c4764b5b5ecd3c5ac3892cc5b46e64 (patch) | |
tree | bd6cc15d5cbedafc50d90e32169b6b7cfee2e850 /module/rnrs | |
parent | 1044537dff91146ed17f13cfa8d1eca5f92f4307 (diff) | |
download | guile-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.scm | 8 |
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) |