This lets us do some trickery so that the stream-element-type propagates from <file-reader>/<file-writer>. For #376.
IN: io.encodings.binary
SINGLETON: binary
-M: binary <encoder> drop ;
-M: binary <decoder> drop ;
+M: binary <encoder> drop ; inline
+M: binary <decoder> drop ; inline
io.encodings.private io.encodings.utf8 io.timeouts kernel libc
locals math math.order namespaces sequences specialized-arrays
specialized-arrays.instances.alien.c-types.uchar splitting
-strings summary system typed ;
+strings summary system typed io.files ;
IN: io.ports
SYMBOL: default-buffer-size
TUPLE: input-port < buffered-port ;
INSTANCE: input-port input-stream
-
-M: input-port stream-element-type drop +byte+ ; inline
+INSTANCE: input-port file-reader
: <input-port> ( handle -- input-port )
input-port <buffered-port> ; inline
TUPLE: output-port < buffered-port ;
INSTANCE: output-port output-stream
+INSTANCE: output-port file-writer
: <output-port> ( handle -- output-port )
output-port <buffered-port> ;
[ nip ] [ buffer>> buffer-capacity <= ] 2bi
[ drop ] [ stream-flush ] if ; inline
-M: output-port stream-element-type drop +byte+ ; inline
-
M: output-port stream-write1
dup check-disposed
1 over wait-to-write
alien.strings ;
IN: io.files
+MIXIN: file-reader
+MIXIN: file-writer
+
+M: file-reader stream-element-type drop +byte+ ; inline
+M: file-writer stream-element-type drop +byte+ ; inline
+
HOOK: (file-reader) io-backend ( path -- stream )
HOOK: (file-writer) io-backend ( path -- stream )
HOOK: (file-appender) io-backend ( path -- stream )
: <file-reader> ( path encoding -- stream )
- [ normalize-path (file-reader) ] dip <decoder> ;
+ [ normalize-path (file-reader) { file-reader } declare ] dip <decoder> ; inline
: <file-writer> ( path encoding -- stream )
- [ normalize-path (file-writer) ] dip <encoder> ;
+ [ normalize-path (file-writer) { file-writer } declare ] dip <encoder> ; inline
: <file-appender> ( path encoding -- stream )
- [ normalize-path (file-appender) ] dip <encoder> ;
+ [ normalize-path (file-appender) { file-writer } declare ] dip <encoder> ; inline
: file-lines ( path encoding -- seq )
<file-reader> stream-lines ;
TUPLE: c-writer < c-stream ;
INSTANCE: c-writer output-stream
+INSTANCE: c-writer file-writer
: <c-writer> ( handle -- stream ) c-writer new-c-stream ;
-M: c-writer stream-element-type drop +byte+ ;
-
M: c-writer stream-write1 dup check-disposed handle>> fputc ;
M: c-writer stream-write
TUPLE: c-reader < c-stream ;
INSTANCE: c-reader input-stream
+INSTANCE: c-reader file-reader
: <c-reader> ( handle -- stream ) c-reader new-c-stream ;
-M: c-reader stream-element-type drop +byte+ ;
-
M: c-reader stream-read-unsafe dup check-disposed handle>> fread-unsafe ;
M: c-reader stream-read1 dup check-disposed handle>> fgetc ;