Awesome, I’ll be watching the repo!
For posterity, I also made a version that supports any number of hooks
registered under one name, based on the compile-time table version.
import tables, macros
var HOOKS {.compileTime.}: Table[string, seq[NimNode]]
macro add_hook*(name: untyped{ident}, body: untyped): untyped =
discard HOOKS.has_key_or_put($name, @[])
HOOKS[$name].add new_block_stmt(new_empty_node(), body)
macro run_hooks*(name: untyped): untyped =
result = new_stmt_list()
if HOOKS.has_key($name):
for hook in HOOKS[$name]:
result.add hook
Run