Skip to content

Commit

Permalink
fix nim secret dots interfering with prompt (#16491)
Browse files Browse the repository at this point in the history
* fix nim secret dots

* cleanups
  • Loading branch information
timotheecour authored Dec 28, 2020
1 parent fbc8a40 commit f9a15db
Show file tree
Hide file tree
Showing 3 changed files with 9 additions and 4 deletions.
6 changes: 5 additions & 1 deletion compiler/llstream.nim
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ when hasRstdin: import rdstdin

type
TLLRepl* = proc (s: PLLStream, buf: pointer, bufLen: int): int
OnPrompt* = proc() {.closure.}
TLLStreamKind* = enum # enum of different stream implementations
llsNone, # null stream: reading and writing has no effect
llsString, # stream encapsulates a string
Expand All @@ -32,6 +33,7 @@ type
rd*, wr*: int # for string streams
lineOffset*: int # for fake stdin line numbers
repl*: TLLRepl # gives stdin control to clients
onPrompt*: OnPrompt

PLLStream* = ref TLLStream

Expand All @@ -55,12 +57,13 @@ proc llStreamOpen*(): PLLStream =
result.kind = llsNone

proc llReadFromStdin(s: PLLStream, buf: pointer, bufLen: int): int
proc llStreamOpenStdIn*(r: TLLRepl = llReadFromStdin): PLLStream =
proc llStreamOpenStdIn*(r: TLLRepl = llReadFromStdin, onPrompt: OnPrompt = nil): PLLStream =
new(result)
result.kind = llsStdIn
result.s = ""
result.lineOffset = -1
result.repl = r
result.onPrompt = onPrompt

proc llStreamClose*(s: PLLStream) =
case s.kind
Expand Down Expand Up @@ -133,6 +136,7 @@ proc llStreamRead*(s: PLLStream, buf: pointer, bufLen: int): int =
of llsFile:
result = readBuffer(s.f, buf, bufLen)
of llsStdIn:
if s.onPrompt!=nil: s.onPrompt()
result = s.repl(s, buf, bufLen)

proc llStreamReadLine*(s: PLLStream, line: var string): bool =
Expand Down
3 changes: 2 additions & 1 deletion compiler/main.nim
Original file line number Diff line number Diff line change
Expand Up @@ -138,7 +138,8 @@ proc commandInteractive(graph: ModuleGraph) =
var m = graph.makeStdinModule()
incl(m.flags, sfMainModule)
var idgen = IdGenerator(module: m.itemId.module, item: m.itemId.item)
processModule(graph, m, idgen, llStreamOpenStdIn())
let s = llStreamOpenStdIn(onPrompt = proc() = flushDot(graph.config, stderr))
processModule(graph, m, idgen, s)

proc commandScan(cache: IdentCache, config: ConfigRef) =
var f = addFileExt(AbsoluteFile mainCommandArg(config), NimExt)
Expand Down
4 changes: 2 additions & 2 deletions compiler/msgs.nim
Original file line number Diff line number Diff line change
Expand Up @@ -19,9 +19,9 @@ template instLoc(): InstantiationInfo = instantiationInfo(-2, fullPaths = true)
template toStdOrrKind(stdOrr): untyped =
if stdOrr == stdout: stdOrrStdout else: stdOrrStderr

template flushDot(conf, stdOrr) =
template flushDot*(conf, stdOrr) =
## safe to call multiple times
let stdOrrKind = stdOrr.toStdOrrKind()
let stdOrrKind = toStdOrrKind(stdOrr)
if stdOrrKind in conf.lastMsgWasDot:
conf.lastMsgWasDot.excl stdOrrKind
write(stdOrr, "\n")
Expand Down

0 comments on commit f9a15db

Please sign in to comment.