diff --git a/compiler/layouter.nim b/compiler/layouter.nim index a8e31ae69b..78f6fcfa0c 100644 --- a/compiler/layouter.nim +++ b/compiler/layouter.nim @@ -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