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
parent 0a1f204f0f
commit 52166e3546
2 changed files with 20 additions and 4 deletions

View File

@@ -173,10 +173,20 @@ proc close*(s: Stream) =
## See also:
## * `flush proc <#flush,Stream>`_
runnableExamples:
var strm = newStringStream("The first line\nthe second line\nthe third line")
## do something...
strm.close()
if not isNil(s.closeImpl): s.closeImpl(s)
block:
let strm = newStringStream("The first line\nthe second line\nthe third line")
## do something...
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 =
## 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
s.close
block:
let fs = newFileStream("amissingfile.txt")
defer: fs.close()
doAssert isNil(fs)
# bug #12410
var a = newStringStream "hehohihahuhyh"