allow deferred close of nil stream (#20706)

* allow deferred close of nil stream

* improve example
This commit is contained in:
n5m 2022-10-31 10:20:06 +00:00 • committed by GitHub
commit 52166e3546
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 20 additions and 4 deletions

View file

@ -173,10 +173,20 @@ proc close*(s: Stream) =
## See also: ## See also:
## * `flush proc <#flush,Stream>`_ ## * `flush proc <#flush,Stream>`_
runnableExamples: runnableExamples:
var strm = newStringStream("The first line\nthe second line\nthe third line") block:
## do something... let strm = newStringStream("The first line\nthe second line\nthe third line")
strm.close() ## do something...
if not isNil(s.closeImpl): s.closeImpl(s) strm.close()
block:
let strm = newFileStream("amissingfile.txt")
# deferring works even if newFileStream fails
defer: strm.close()
if not isNil(strm):
## do something...
if not isNil(s) and not isNil(s.closeImpl):
s.closeImpl(s)
proc atEnd*(s: Stream): bool = proc atEnd*(s: Stream): bool =
## Checks if more data can be read from `s`. Returns ``true`` if all data has ## Checks if more data can be read from `s`. Returns ``true`` if all data has

View file

@ -50,6 +50,12 @@ block tstreams3:
echo line echo line
s.close s.close
block:
let fs = newFileStream("amissingfile.txt")
defer: fs.close()
doAssert isNil(fs)
# bug #12410 # bug #12410
var a = newStringStream "hehohihahuhyh" var a = newStringStream "hehohihahuhyh"