diff options
author | Timothee Cour <timothee.cour2@gmail.com> | 2020-12-28 03:19:47 -0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-12-28 12:19:47 +0100 |
commit | f9a15dbae909f4521cd506bedf7ec500c4f4d9f8 (patch) | |
tree | f5d58c4e0e46b065318fe8bc79e968886a4ce0d3 | |
parent | fbc8a40c7a351ff7c0f2dc0608bc8926f89d8537 (diff) | |
download | Nim-f9a15dbae909f4521cd506bedf7ec500c4f4d9f8.tar.gz |
fix `nim secret` dots interfering with prompt (#16491)
* fix nim secret dots * cleanups
-rw-r--r-- | compiler/llstream.nim | 6 | ||||
-rw-r--r-- | compiler/main.nim | 3 | ||||
-rw-r--r-- | compiler/msgs.nim | 4 |
3 files changed, 9 insertions, 4 deletions
diff --git a/compiler/llstream.nim b/compiler/llstream.nim index 6df927c60..b768e6c83 100644 --- a/compiler/llstream.nim +++ b/compiler/llstream.nim @@ -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 @@ -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 @@ -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 @@ -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 = diff --git a/compiler/main.nim b/compiler/main.nim index 73676ffd5..74c19bf10 100644 --- a/compiler/main.nim +++ b/compiler/main.nim @@ -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) diff --git a/compiler/msgs.nim b/compiler/msgs.nim index d027ce960..6d6e21204 100644 --- a/compiler/msgs.nim +++ b/compiler/msgs.nim @@ -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") |