Refactor closeEmitter to make it more modular (#12365)

This commit is contained in:
Federico Ceratto
2019-10-07 16:26:27 +01:00
committed by Andreas Rumpf
parent a60f18d025
commit f9d95fd6a7

View File

@@ -160,13 +160,11 @@ proc guidingInd(em: Emitter; pos: int): int =
inc i
result = -1
proc closeEmitter*(em: var Emitter) =
proc renderTokens*(em: var Emitter): string =
## Render Emitter tokens to a string of code
template defaultCase() =
content.add em.tokens[i]
inc lineLen, em.tokens[i].len
let outFile = em.config.absOutFile
var content = newStringOfCap(16_000)
var maxLhs = 0
var lineLen = 0
@@ -243,6 +241,11 @@ proc closeEmitter*(em: var Emitter) =
defaultCase()
inc i
return content
proc writeOut*(em: Emitter, content: string) =
## Write to disk
let outFile = em.config.absOutFile
if fileExists(outFile) and readFile(outFile.string) == content:
discard "do nothing, see #9499"
return
@@ -253,6 +256,11 @@ proc closeEmitter*(em: var Emitter) =
f.llStreamWrite content
llStreamClose(f)
proc closeEmitter*(em: var Emitter) =
## Renders emitter tokens and write to a file
let content = renderTokens(em)
em.writeOut(content)
proc wr(em: var Emitter; x: string; lt: LayoutToken) =
em.tokens.add x
em.kinds.add lt