[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Some work on the R6RS I/O libraries
From: |
Andreas Rottmann |
Subject: |
Some work on the R6RS I/O libraries |
Date: |
Mon, 15 Nov 2010 22:45:11 +0100 |
User-agent: |
Gnus/5.13 (Gnus v5.13) Emacs/24.0.50 (gnu/linux) |
Fix missing port-table locking and bytevector output port segfault.
* libguile/r6rs-ports.c (make_bip, make_cbip, make_bop, make_cbop): Lock
the port table.
* libguile/r6rs-ports.c (make_bop): Let the returned extraction
procedure refer to the port's buffer instead of the port itself. This
fixes a segfault if the port is closed before the extraction procedure
is called.
(bop_proc_apply): Adapt accordingly.
* test-suite/tests/r6rs-ports.test (8.2.10 Output ports): Add testcase
for extraction after close.
Add implementation of "transcoded ports".
* libguile/r6rs-ports.c (make_tp, tp_write, tp_fill_input, tp_flush,
tp_close, initialize_transcoded_ports, scm_transcoded_port): New
functions.
(scm_init_r6rs_ports): Call `initialize_transcoded_ports'.
* module/rnrs/ports.scm (transcoded-port): Remove, this is now
implemented in C.
* test-suite/tests/r6rs-ports.test (8.2.6 Input and output ports): Added a
few tests for `transcoded-port'.
Move the I/O condition types from `(rnrs conditions)', where they were
not exported, to `(rnrs files)', where they are.
* module/rnrs/conditions.scm: Remove definition of I/O condition types.
* module/rnrs/files.scm: Replace references to I/O condition types
inside `(rnrs conditions)' with the actual definitions.
* module/rnrs/io/simple.scm: Don't `@@'-reference the I/O condition types, just
imported them from `(rnrs files)'.
Work towards a more complete implementation of `(rnrs io ports)'.
* module/rnrs/io/ports.scm: Change into an R6RS library from a "regular"
Guile module, so the bookkeeping for #:re-export and #:replace is done
automatically and we gain control over the imports from `(guile)'.
(file-option, buffer-mode, eol-style, error-handling-mode,
make-transcoder, native-transcoder, latin-1-codec, utf-8-codec,
utf-16-codec, call-with-bytevector-output-port, open-file-input-port,
open-file-output-port, make-custom-textual-output-port,
flush-output-port, put-char, put-datum, put-string, get-char,
get-datum, get-line, get-string-all, lookahead-char,
standard-input-port, standard-output-port, standard-error-port):
Define all of these.
(call-with-port): Don't use `dynamic-wind', as it is against its
specification in R6RS 8.2.6.
* module/rnrs/io/simple.scm (call-with-input-file,
call-with-output-file): Define these in terms of R6RS procedures to
get correct exception behavior.
rnrs-io-ports.diff
Description: Text Data
Cheers, Rotty
--
Andreas Rottmann -- <http://rotty.yi.org/>
- Some work on the R6RS I/O libraries,
Andreas Rottmann <=
- Re: Some work on the R6RS I/O libraries, Ludovic Courtès, 2010/11/19
- [PATCH 2/4] Add implementation of "transcoded ports", Andreas Rottmann, 2010/11/20
- Re: [PATCH 2/4] Add implementation of "transcoded ports", Ludovic Courtès, 2010/11/20
- Re: [PATCH 2/4] Add implementation of "transcoded ports", Andreas Rottmann, 2010/11/21
- [PATCH 1/4] Turn `(rnrs io ports)' into an R6RS library, Andreas Rottmann, 2010/11/21
- [PATCH 2/4] Reorganize the R6RS I/O condition types, Andreas Rottmann, 2010/11/21
- [PATCH 4/4] Add implementation of "transcoded ports", Andreas Rottmann, 2010/11/21
- Re: [PATCH 4/4] Add implementation of "transcoded ports", Ludovic Courtès, 2010/11/24
- Re: [PATCH 4/4] Add implementation of "transcoded ports", Andreas Rottmann, 2010/11/24
- Re: [PATCH 4/4] Add implementation of "transcoded ports", Ludovic Courtès, 2010/11/25