allows access to .compileTime vars at runtime (#12128)

This commit is contained in:
Andreas Rumpf 2019-09-05 11:56:32 +02:00 • committed by GitHub
commit a5e2db2ac5
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
5 changed files with 52 additions and 14 deletions

View file

@ -5928,6 +5928,31 @@ Is the same as:
proc astHelper(n: NimNode): NimNode {.compileTime.} =
result = n
``compileTime`` variables are available at runtime too. This simplifies certain
idioms where variables are filled at compile-time (for example, lookup tables)
but accessed at runtime:
.. code-block:: nim
:test: "nim c -r $1"
import macros
var nameToProc {.compileTime.}: seq[(string, proc (): string {.nimcall.})]
macro registerProc(p: untyped): untyped =
result = newTree(nnkStmtList, p)
let procName = p[0]
let procNameAsStr = $p[0]
result.add quote do:
nameToProc.add((`procNameAsStr`, `procName`))
proc foo: string {.registerProc.} = "foo"
proc bar: string {.registerProc.} = "bar"
proc baz: string {.registerProc.} = "baz"
doAssert nameToProc[2][1]() == "baz"
noReturn pragma
---------------