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

Reply via email to