mirror of
https://github.com/nim-lang/Nim.git
synced 2026-04-18 21:40:32 +00:00
Fix peekLine() for streams
Motivation ---------- peekLine procs use defer to reset position in the stream, but it also make them always return nil. Modification ------------ Explicitly set result value in peekLine, and write missing unit test. Result ------ Tests are green and bug is fixed
This commit is contained in:
@@ -242,7 +242,7 @@ proc peekLine*(s: Stream, line: var TaintedString): bool =
|
||||
## otherwise. If ``false`` is returned `line` contains no new data.
|
||||
let pos = getPosition(s)
|
||||
defer: setPosition(s, pos)
|
||||
readLine(s, line)
|
||||
result = readLine(s, line)
|
||||
|
||||
proc readLine*(s: Stream): TaintedString =
|
||||
## Reads a line from a stream `s`. Note: This is not very efficient. Raises
|
||||
@@ -263,7 +263,7 @@ proc peekLine*(s: Stream): TaintedString =
|
||||
## `EIO` if an error occurred.
|
||||
let pos = getPosition(s)
|
||||
defer: setPosition(s, pos)
|
||||
readLine(s)
|
||||
result = readLine(s)
|
||||
|
||||
type
|
||||
StringStream* = ref StringStreamObj ## a stream that encapsulates a string
|
||||
@@ -458,3 +458,7 @@ when defined(testing):
|
||||
assert(ss.getPosition == 5) # did move
|
||||
assert(ss.peekLine() == "uick brown fox jumped over the lazy dog.")
|
||||
assert(ss.getPosition == 5) # haven't moved
|
||||
var str = newString(100)
|
||||
assert(ss.peekLine(str))
|
||||
assert(str == "uick brown fox jumped over the lazy dog.")
|
||||
assert(ss.getPosition == 5) # haven't moved
|
||||
|
||||
Reference in New Issue
Block a user