Added some type safety, used _fieldPairs_ instead of _items_ as an iterator:
    
    
    import macros, tables, strutils
    
    type
      SettingsType = tuple[x: int, y: int, Q: float]
    
    const ProgramName = "MyProgram"
    const Settings = (x: 5, y: 3, Q: 12.0)
    
    template doSomething(name: string, range: Slice[int], iter: (iterator(t: 
SettingsType): RootObj)): untyped =
      echo name
      for i in range:
        echo i
      for n, v in iter:
        echo "$#: $#" % [n, $v]
    
    macro myMacro(body: untyped): typed =
      var props = initTable[string, NimNode]()
      for def in body:
        props[$def[0].ident] = def[1][0]
      getAst doSomething(props["name"], props["range"], props["iter"])
    
    myMacro:
      name: ProgramName
      range: 1..10
      iter: Settings.fieldPairs
    

**Edit**: added actual use of _range_.

Reply via email to