Add options to storeMacroResults that improve the results in NBC

This commit is contained in:
Zahary Karadjov 2020-05-24 00:49:12 +03:00
parent 9a2a542b9f
commit a333eb080f
No known key found for this signature in database
GPG Key ID: C8936F8A3073D609
1 changed files with 18 additions and 10 deletions

View File

@ -26,22 +26,14 @@ var
macroLocations {.compileTime.} = newSeq[LineInfo]()
macroOutputs {.compileTime.} = newSeq[NimNode]()
proc storeMacroResult*(callSite: LineInfo, macroResult: NimNode) =
macroLocations.add callSite
macroOutputs.add macroResult
proc storeMacroResult*(macroResult: NimNode) =
let usageSite = callsite().lineInfoObj
storeMacroResult(usageSite, macroResult)
macro dumpMacroResults*: untyped =
proc writeMacroResultsNow* {.compileTime.} =
var files = initTable[string, NimNode]()
proc addToFile(file: var NimNode, location: LineInfo, macroOutput: NimNode) =
if file == nil:
file = newNimNode(nnkStmtList, macroOutput)
file.add newCommentStmtNode($location)
file.add newCommentStmtNode("Generated at line " & $location.line)
file.add macroOutput
for i in 0..< macroLocations.len:
@ -53,6 +45,22 @@ macro dumpMacroResults*: untyped =
writeFile(targetFile, repr(contents))
hint "Wrote macro output to " & targetFile, contents
proc storeMacroResult*(callSite: LineInfo,
macroResult: NimNode,
writeOutputImmediately = false) =
macroLocations.add callSite
macroOutputs.add macroResult
if writeOutputImmediately:
# echo macroResult.repr
writeMacroResultsNow()
proc storeMacroResult*(macroResult: NimNode, writeOutputImmediately = false) =
let usageSite = callsite().lineInfoObj
storeMacroResult(usageSite, macroResult, writeOutputImmediately)
macro dumpMacroResults*: untyped =
writeMacroResultsNow()
proc findPragma*(pragmas: NimNode, pragmaSym: NimNode): NimNode =
for p in pragmas:
if p.kind in {nnkSym, nnkIdent} and eqIdent(p, pragmaSym):