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_.