From 6f12877418c96bf96cc14321bad59e7b2b7d719e Mon Sep 17 00:00:00 2001 From: Doug Coleman Date: Mon, 26 Jan 2009 15:14:54 -0600 Subject: [PATCH] make temporary nesting work better with limited streams, fix a bug with unlimit --- basis/io/streams/limited/limited-docs.factor | 2 +- basis/io/streams/limited/limited-tests.factor | 19 ++++++++++++++++++- basis/io/streams/limited/limited.factor | 15 +++++++++++++-- 3 files changed, 32 insertions(+), 4 deletions(-) diff --git a/basis/io/streams/limited/limited-docs.factor b/basis/io/streams/limited/limited-docs.factor index 90f7860672..fac1232cc0 100755 --- a/basis/io/streams/limited/limited-docs.factor +++ b/basis/io/streams/limited/limited-docs.factor @@ -81,7 +81,7 @@ ARTICLE: "io.streams.limited" "Limited input streams" "Unlimits a limited stream:" { $subsection unlimit } "Unlimits the current " { $link input-stream } ":" -{ $subsection limit-input } +{ $subsection unlimit-input } "Make a limited stream throw an exception on exhaustion:" { $subsection stream-throws } "Make a limited stream return " { $link f } " on exhaustion:" diff --git a/basis/io/streams/limited/limited-tests.factor b/basis/io/streams/limited/limited-tests.factor index c88d52be81..feddc130e9 100644 --- a/basis/io/streams/limited/limited-tests.factor +++ b/basis/io/streams/limited/limited-tests.factor @@ -1,6 +1,7 @@ USING: io io.streams.limited io.encodings io.encodings.string io.encodings.ascii io.encodings.binary io.streams.byte-array -namespaces tools.test strings kernel io.streams.string accessors ; +namespaces tools.test strings kernel io.streams.string accessors +io.encodings.utf8 io.files destructors ; IN: io.streams.limited.tests [ ] [ @@ -59,3 +60,19 @@ IN: io.streams.limited.tests "abc" 3 stream-eofs limit unlimit "abc" = ] unit-test + +[ t ] +[ + "abc" 3 stream-eofs limit unlimit + "abc" = +] unit-test + +[ t ] +[ + [ + "resource:license.txt" utf8 &dispose + 3 stream-eofs limit unlimit + "resource:license.txt" utf8 &dispose + [ decoder? ] both? + ] with-destructors +] unit-test diff --git a/basis/io/streams/limited/limited.factor b/basis/io/streams/limited/limited.factor index 71c6eb67d4..1237b3aba2 100755 --- a/basis/io/streams/limited/limited.factor +++ b/basis/io/streams/limited/limited.factor @@ -5,7 +5,7 @@ USING: kernel math io io.encodings destructors accessors sequences namespaces byte-vectors fry combinators ; IN: io.streams.limited -TUPLE: limited-stream stream count limit mode ; +TUPLE: limited-stream stream count limit mode stack ; SINGLETONS: stream-throws stream-eofs ; @@ -24,13 +24,24 @@ M: decoder limit ( stream limit mode -- stream' ) M: object limit ( stream limit mode -- stream' ) ; -: unlimit ( stream -- stream' ) +GENERIC: unlimit ( stream -- stream' ) + +M: decoder unlimit ( stream -- stream' ) [ stream>> ] change-stream ; +M: object unlimit ( stream -- stream' ) + stream>> stream>> ; + : limit-input ( limit mode -- ) input-stream [ -rot limit ] change ; : unlimit-input ( -- ) input-stream [ unlimit ] change ; +: with-unlimited-stream ( stream quot -- ) + [ clone unlimit ] dip call ; inline + +: with-limited-stream ( stream limit mode quot -- ) + [ limit ] dip call ; inline + ERROR: limit-exceeded ; ERROR: bad-stream-mode mode ;