From f9d95fd6a71f949db5994369da96f1c42d40d2a7 Mon Sep 17 00:00:00 2001 From: Federico Ceratto Date: Mon, 7 Oct 2019 16:26:27 +0100 Subject: [PATCH] Refactor closeEmitter to make it more modular (#12365) --- compiler/layouter.nim | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) 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